Html2canvas在Vue中的使用

html转canvas,可用于截图(附官网链接:http://html2canvas.hertzen.com/

截图

(仿写了一个微信聊天界面φ(>ω<*) )     

                    

使用说明

1、引入 JS 文件


<script src="../js/html2canvas.js"></script>

或者使用 npm 安装

npm install html2canvas

vue 中使用的话,npm 安装后需要在使用界面引入

import html2canvas from 'html2canvas'

2、使用案例


本案例是用于vue-cli3.x+typescript

html

这里需要说明的 一点是,我没有通过getElementById来获取节点,因为在typescript标准下,js获取节点的方式会编译不通过,所以使用了vue的ref,获取的时候使用 const _canvas: any = _this.$refs.cutScreen as HTMLElement;

类名为screen_subject的内容可以改成你需要的

<div class="screen_subject" ref="cutScreen">
            <div class="screen_header">
                <div class="title">
                    <div class="real_time">
                        <span>{{currentTime}}</span>
                    </div>
                    <div class="signal">
                        <i class="symbol fa fa-bluetooth-b" aria-hidden="true"></i>
                        <i class="symbol fa fa-signal" aria-hidden="true"></i>
                        <span class="symbol">4G</span>
                        <span class="symbol"><i class="fa fa-battery-full" aria-hidden="true"></i> 100%</span>
                    </div>
                </div>
                <div class="chatroom_name">
                    <i class="el-icon-arrow-left"></i>
                    <span>{{chatroomDetail.noSpanName}}(<b>{{chatroomDetail.memberCount}}</b>)</span>
                </div>

            </div>
            <div class="msg_sub">
                <div class="msg_view" v-for = "msg in messages" :key="msg.msgId">
                    <screen-message :message="msg" :tagetMsgId="msgId"/>
                </div>
            </div>
            <div class="editor">
                <div class="editor_tools left">
                    <img src="../../../../assets/image/audio-icon.png" alt="">
                </div>
                <span class="input_line"></span>
                <div class="editor_tools right">
                    <img src="../../../../assets/image/emoji.png" alt="">
                    <img src="../../../../assets/image/expand.png" alt="">
                </div>
            </div>

        </div>

下载操作

<a :href="screenUrl" class="down" download="下载">下载</a>

js

这里是生成截图后,利用a标签的download属性直接从浏览器端下载图片(注:跨域的图片是截不到的哦)

private doScreeenShots() {
          const _this = this
          setTimeout(() => {
               // 创建一个新的canvas
              const _canvas: any = _this.$refs.cutScreen as HTMLElement;
             // 此处用于解决截图不清晰问题,将生成的canvas放大,然后再填充到原有的容器中就会清晰
              const width = _canvas.offsetWidth; 
              const height = _canvas.offsetHeight; 
              const canvas2 = document.createElement('canvas');
              const scale = 2;
              canvas2.width = width * scale;
              canvas2.height = height * scale;
              const context1 = canvas2.getContext('2d')
              if(context1) {
                context1.scale(scale, scale);
              }
              const opts = {
                    scale,
                    canvas: canvas2,
                    // logging: true, //日志开关,便于查看html2canvas的内部执行流程
                    width,
                    height,
                    // 【重要】开启跨域配置
                    useCORS: true 
                };
              html2canvas(_canvas,opts).then((canvas) => {
                  const context = canvas2.getContext('2d');
                  if(context) {
                      context.scale(2,2);
                      context.mozImageSmoothingEnabled = false;
                      context.webkitImageSmoothingEnabled = false;
                      context.imageSmoothingEnabled = false;
                  }
                  // canvas转换成url,然后利用a标签的download属性,直接下载,绕过上传服务器再下载
                  _this.screenUrl = canvas.toDataURL()
              });
          },1000)

      }

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Vue 3使用html2canvas可以通过以下步骤进行: 1. 首先,安装html2canvas库。你可以使用npm或yarn在你的项目安装它: ```bash npm install html2canvas ``` 2. 在你的Vue组件,导入html2canvas库: ```javascript import html2canvas from 'html2canvas'; ``` 3. 在需要截取的元素上添加一个ref属性,以便在后面引用该元素。例如,在模板添加ref属性: ```html <template> <div ref="captureElement"> <!-- 这里是你要截取的内容 --> </div> <button @click="capture">截图</button> </template> ``` 4. 在Vue组件的methods,编写一个函数来触发截图操作。在该函数使用html2canvas库的`toBlob`方法来生成截图的blob对象。你可以将该blob对象转换为图片并进行下载或者进一步处理。 ```javascript methods: { capture() { const element = this.$refs.captureElement; html2canvas(element).then(canvas => { canvas.toBlob(blob => { const imageURL = URL.createObjectURL(blob); // 这里可以进行下载或者进一步处理 }); }); } } ``` 在上述代码,`this.$refs.captureElement`引用了之前添加ref属性的元素。`html2canvas(element)`将传入的元素转换为canvas对象,然后通过`toBlob`方法生成blob对象,最后可以使用`URL.createObjectURL`方法将blob对象转换为图片URL。你可以根据需要进一步处理该URL,例如下载或者展示给用户。 以上是在Vue 3使用html2canvas的基本步骤,希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值