vue 使用html2canvas将DOM转化为图片的方法


Posted in Javascript onSeptember 11, 2018

一、前言

我发现将DOM转化为图片是一个非常常见的需求,而自己手动转是非常麻烦的,于是找到了html2canvas这个插件,既是用得比较多的也是维护得比较好的一个插件。

注意:版本比较多,这里介绍最新版

二、代码

1. 安装

npm install html2canvas --save

现在最新的版本应该是1.0.0,另外还有一个比较经典的版本是0.5.0,网上有许多关于这个版本的bug说明。

2. 使用

<div class="imageWrapper" ref="imageWrapper">
  <img class="real_pic" :src="dataURL" />
  <slot></slot>
</div>

slot里面是你需要转化为图片的DOM元素。

data() {
  return {
    dataURL: ''
  }
},

dataURL是最后转化出来的图片base64地址,放在img标签中即可展示。

methods: {

toImage() {
  html2canvas(this.$refs.imageWrapper,{
    backgroundColor: null
  }).then((canvas) => {
    let dataURL = canvas.toDataURL("image/png");
    this.dataURL = dataURL;
  });
}
}

html2canvas的用法非常简单,不过1.0.0已经将写法改为了promise,在.then方法里获取canvas对象。

3.常见bug

1. 生成出来的图片有白色边框

在配置项里配置backgroundColor: null即可。

2. 有图片显示不出来并有报错(一般是跨域的错)

这是最常见的一个bug,就是这个插件无法生成跨域了的图片,也看了官方文档配置了也百度了都没有好的办法,最后是让后端直接把跨域的图片转成base64,就完美解决了这个问题。

3. 生成图片后会在原始DOM上覆盖而产生一个闪动的效果

先让生成的图片隐藏,等生成好以后再展示。(没有在手机上测试,效果不一定令人满意)

4.经典版本(0.5.0)常见bug

1.生成的图片模糊
2.有跨域图片导致生成的图片不完整

这两个问题网上百度都有很多解决办法。

html2canvas在vue下的巨坑

使用

html

<div id="capture" style="padding: 10px; background: #f5da55">
  <h4 style="color: #000; ">Hello world!</h4>
</div>

js

html2canvas(document.querySelector("#capture")).then(canvas => {
  document.body.appendChild(canvas)
});
 
```
 
![clipboard.png](/img/bVbghPZ)
 
```
html2canvas(document.querySelector("#capture") {
  async: true
}).then(canvas => {
  document.body.appendChild(canvas)
});

如果你要配置一些参数可以在传入dom的后面进行 object 传参 官网文档可查

官网文档

我自己的工程环境是vue-cli会进行webpack打包在ios下运行的时候会出现错误因为我要生成一张图片是的canvas api 是 toDataURL

这错误在ios一直显示是权限问题  在ios 和safari 上的问题是一致的 原因是canva绘制dom上的图片的时候是 base64的格式(webpack会对asstes目录下的图片进行压缩)花费了几个小时才解决这个问题,感觉很不值所以分享给大家希望大家别踩进去了!解决方法是可以 static目录或者同域下的文件地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
Jul 06 Javascript
javascript 验证日期的函数
Mar 18 Javascript
js跑马灯代码(自写)
Apr 17 Javascript
ScrollDown的基本操作示例
Jun 09 Javascript
前台js调用后台方法示例
Dec 02 Javascript
非常漂亮的相册集 使用jquery制作相册集
Apr 28 Javascript
Angular2 (RC5) 路由与导航详解
Sep 21 Javascript
jQuery中的AjaxSubmit使用讲解
Sep 25 Javascript
jQuery实现的回车触发按钮事件功能示例
Mar 25 jQuery
Vue数据双向绑定原理及简单实现方法
May 18 Javascript
JavaScript使用小插件实现倒计时的方法讲解
Mar 11 Javascript
Vue-router编程式导航的两种实现代码
Mar 04 Vue.js
Vue项目数据动态过滤实践及实现思路
Sep 11 #Javascript
使用vue.js在页面内组件监听scroll事件的方法
Sep 11 #Javascript
vue+axios+element ui 实现全局loading加载示例
Sep 11 #Javascript
Webpack之tree-starking 解析
Sep 11 #Javascript
node.js之基础加密算法模块crypto详解
Sep 11 #Javascript
Vue在页面数据渲染完成之后的调用方法
Sep 11 #Javascript
浅谈Webpack核心模块tapable解析
Sep 11 #Javascript
You might like
php中的curl_multi系列函数使用例子
2014/07/29 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
数理公式,也可以这么唯美
2021/03/10 无线电
用JS写的一个TableView控件代码
2010/01/23 Javascript
xss文件页面内容读取(解决)
2010/11/28 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
JavaScript基本语法学习教程
2016/01/14 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python动态监控日志内容的示例
2014/02/16 Python
Python中Django发送带图片和附件的邮件
2017/03/31 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
python linecache 处理固定格式文本数据的方法
2019/01/08 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
利用pandas将非数值数据转换成数值的方式
2019/12/18 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
2021/01/10 Python
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
一套.net面试题及答案
2016/11/02 面试题
村级个人对照检查材料
2014/08/22 职场文书
党性锻炼的心得体会
2014/09/03 职场文书
餐厅感恩节活动策划方案
2014/10/11 职场文书
幼儿园2014年度工作总结
2014/11/10 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
创业的9条正确思考方式
2019/08/26 职场文书