在vue项目里使用js-web-screen-shot 实现截图的功能

这篇具有很好参考价值的文章主要介绍了在vue项目里使用js-web-screen-shot 实现截图的功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

怎么在前端项目里添加一个截图功能呢,今天我们使用js-web-screen-shot  来实现一下,超详细的代码,教你轻轻松松做截图。以下是基于vue3+ts文章来源地址https://www.toymoban.com/news/detail-852340.html

<template>
   <!--截图图标-->
  <svg-icon icon-class="screen" 
 style="style:display:flex;width:22px;
 height:22px;cursor:pointer;margin:0px 30px 0px 30px;" @click="jitT"/>
  <!--点击对钩后确认保存-->
    <el-dialog
      v-model="confirmDialog"
      width="40%"
      :closeOnClickModal="false"
      title="提示"
      >
      <h3 style="display:flex;justify-content:start;font-size: 18px;">
       <i class="el-icon-warning" style="margin-top: 16px;margin-right: 18px;"></i>
        请确认是否保存截图!
       </h3>
      <template #footer class="dialog-footer">
        <el-button @click="confirmDialog=false" >取 消</el-button>
        <el-button type="primary" @click="confirmUpdataName" >确 定</el-button>
      </template>
    </el-dialog>
    <!---可有可无,确认保存后用户添加图片名称-->
    <el-dialog
      v-model="nameDialog"
      :closeOnClickModal="false"
      width="40%"
      title="图片名称"
      >
      <el-form ref="nameRef" :model="nameData" label-position="left">
        <el-form-item label="图片名称:" :rules="[{required:true,message:'请输入图片名称',trigger:['blur','change']}]" prop="name">
          <el-input v-model="nameData.name" placeholder="请输入图片名称" style="width:60%"></el-input>
        </el-form-item>
      </el-form>
      <template #footer class="dialog-footer">
        <el-button @click="nameDialog=false" >取 消</el-button>
        <el-button type="primary" @click="confirmSave" >确 定</el-button>
      </template>
    </el-dialog>
</template>
<script lang="ts">
import { defineComponent, ref, unref } from 'vue';
import  { uploadOssApi } from '../api'
import { Message } from '_c/Message'
import ScreenShort from 'js-web-screen-shot'
export default  defineComponent({
  emits:['imageData'],
  setup(props, {emit}) {
    const nameRef = ref()
    const confirmDialog = ref<Boolean>(false)
    const nameDialog = ref<Boolean>(false)
    const imgUrl = ref()
    const nameData = ref({name:''})
    //截图事件
    function jitT () {
      const screenShotHandler = new ScreenShort({
        enableWebRtc: false, // 是否显示选项框
        level: 99, // 层级级别
        completeCallback: callback, //确认回调
        closeCallback: closeFn  //取消回调
      } as any)
    }
    //确认回调
    const callback = (val:any) => {
      confirmDialog.value = true
      imgUrl.value = base64ToBlob(val.base64)  
    }
    //取消回调
     const closeFn = (base64:any) => {
       console.log(base64)
     }
    //转为base64好上传oss
    function base64ToBlob(code:any) {
      let parts = code.split(";base64,");
      let contentType = parts[0].split(":")[1];
      let raw = window.atob(parts[1]);
      let rawLength = raw.length;
      let uInt8Array = new Uint8Array(rawLength);
      for (let i = 0; i < rawLength; ++i) {
        uInt8Array[i] = raw.charCodeAt(i);
      }
      return new Blob([uInt8Array], { type: contentType });
    }
      // 上传图片到oss
      async function confirmSave() {
        const formWrap = unref(nameRef) 
        formWrap.validate(async(valid:any) => {
          if (valid) {
            const form = new FormData()
            console.log('form',form);
            form.append('file', imgUrl.value, `${nameData.value.name}.png`)
            form.append('businessType', 'questionScreen')
            const res:any = await uploadOssApi({
              data: form
            })
            if(res?.code === '200') {
              const data = {fileId: res.data, fileName: `${nameData.value.name}.png`}
              emit('imageData',data)
              nameDialog.value = false
              nameData.value.name = ''
            } else {
              Message.error(res.msg)
            }
          } else {
            console.log('error submit!!')
            return false
          } 
        })
        }
      function confirmUpdataName() {
        confirmDialog.value = false
        nameDialog.value = true
      }
      return {
        jitT,
        confirmDialog,
        nameDialog,
        confirmUpdataName,
        confirmSave,
        nameRef,
        nameData
      }
  }
})
</script>

到了这里,关于在vue项目里使用js-web-screen-shot 实现截图的功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue项目业务实现,视频监控-文件流,大屏适配方案(v-scale-screen),websocket前端

    最近把以前的业务场景及解决方案整理了一下,具体实现的工具如下: 监控-视频文件流==video.js + videojs-contrib-hls 大屏适配方案== v-scale-screen websocket==sockjs-client+ webstomp-client 下载video插件, 使用方法 (1)导入 (2)模板中写入标签 (3)页面渲染时调用函数,渲染视频 option

    2024年02月16日
    浏览(42)
  • vue 项目使用three.js 实现3D看房效果

    0.前言 该教程能帮助直接写出vue项目的3D看房效果!!! 先上效果图 1.安装依赖 2.vue代码 这里文件名为three.vue 代码非原创,出处 vue3+threejs实现全景看房 (异步加载 BOLLROOM 部件为对原代码的修改) 注意这里的hdr 文件必须要放在assets文件夹中,且要通过import模块的形式导入!

    2024年02月13日
    浏览(56)
  • vue项目中使用echarts和china.js实现中国地图

    在echarts最新的5.4.0版本中,已不能直接引用china.js来绘制中国地图,需要我们自己下载china.js包 在网上查找资料,大部分是在index.html文件中直接引入echarts和china.js文件,但我使用这种方法在vue项目中引入失败,目前尝试可行的方法是把包下载到node_modules的echarts包里面,文件和

    2024年02月13日
    浏览(40)
  • 在vue项目中使用video.js实现视频播放和视频进度条打点

    引入videojs插件 注意: controls 如果不是true的话,不会显示播放按钮 播放按钮默认在 左上角 ,是作者认为会遮挡内容考虑的,不过这个是可以根据参数修改的,只需要给video标签加一个class( vjs-big-play-centered )就可以了。 要实现的功能是视频的进度条上面有一些小点,然后

    2023年04月08日
    浏览(84)
  • vue3项目使用pdf.js插件实现:搜索高亮、修改pdf.js显示的页码、向pdf.js传值、控制搜索、处理接口文件流

    官网地址:http://mozilla.github.io/pdf.js/ 中文文档地址:https://gitcode.gitcode.host/docs-cn/pdf.js-docs-cn/print.html PDF.js是基于HTML5技术构建的,用于展示可移植文档格式的文件(PDF),它可以在现代浏览器中使用且无需安装任何第三方插件。 pdf.js主要包含两个库文件 pdf.js:负责API解析 pdf.wor

    2024年02月13日
    浏览(70)
  • Vue项目中app.js过大,导致web初始化加载过慢问题

    1、删除多余不需要的库: npm uninstall xxx 如例如moment库文件是很大的可以直接放到index.html文件直接CDN引入 2、修改/config/index.js配置文件:将productionGzip设置为false ​ 3、设置vue-router懒加载 懒加载配置: ​ 非懒加载配置: ​ 4、在webpack.prod.conf.js文件中修改配置: ​ 5、在in

    2024年02月11日
    浏览(42)
  • 使用node.js 搭建一个简单的HelloWorld Web项目

    文档结构 config.ini one.js 使用方法 启动内网穿透 在控制台启动js文件 访问网页 修改为8081 登录natapp官网 成功访问

    2024年02月14日
    浏览(57)
  • vue3 使用 web3.js;钱包转账;唤醒钱包.......

    web3.js基本使用 本篇文章不适合没有经验的小白,需要对web3有一定的了解,所以有些参数需要自己懂! 准备 安装web3.js依赖包 npm install web3 文档教程地址:https://web3.tryblockchain.org/ 这是我自己封装的类 web3.js 直接复制过去就可以用

    2024年02月03日
    浏览(52)
  • Vue.js 学习14 集成H265web.js播放器实现webpack自动化构建

    H265web.js 是一个用于在 Web 浏览器中播放 H.265 视频的 JavaScript 播放器。它支持在浏览器中直接解码 H.265 编码的视频流,提供了高效的视频播放体验。在 Element UI 项目中集成 H265web.js 可以让我们轻松实现 H.265 视频的播放功能。 H265web.js 开源地址: https://github.com/numberwolf/h265web

    2024年03月14日
    浏览(57)
  • 前端实现自适应屏幕数据可视化大屏(vue + v-scale-screen组件 + dataV组件)

    前言 目前市面上有很多付费的数据可视化平台,作为一个代码编程人员,为啥不自己搞一套呢,不仅自己可以增加自己的技能,也可以减少开发成本,何乐而不为呢? 写这篇文章,一方面工作有需求要实现数据可视化大屏,另一方面当然现在也有很多场景都用到数据可视化

    2024年02月08日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包