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 相关文章推荐
XML+XSL 与 HTML 两种方案的结合
Apr 22 Javascript
js每隔5分钟执行一次ajax请求的实现方法
Nov 27 Javascript
动态添加option及createElement使用示例
Jan 26 Javascript
JavaScript中的console.assert()函数介绍
Dec 29 Javascript
js实现点击图片改变页面背景图的方法
Feb 28 Javascript
js实现跨域的方法实例详解
Jun 24 Javascript
给easyui datebox扩展一个清空的实例
Nov 09 Javascript
jQuery实现拖拽可编辑模块功能代码
Jan 12 Javascript
js仿淘宝评价评分功能
Feb 28 Javascript
基于原生js运动方式关键点的总结(推荐)
Oct 01 Javascript
Angular4绑定html内容出现警告的处理方法
Nov 03 Javascript
vue.js 使用原生js实现轮播图
Apr 26 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数组声明、遍历、数组全局变量使用小结
2013/06/05 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
PHP对象链式操作实现原理分析
2016/10/09 PHP
PHP判断密码强度的方法详解
2017/05/26 PHP
读jQuery之五(取DOM元素)
2011/06/20 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
2012/12/28 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
javascript判断office版本示例
2014/04/11 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
Node.js实现的简易网页抓取功能示例
2014/12/05 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
2016/03/31 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
2016/04/15 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
纯JS实现简单的日历
2017/06/26 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
微信小程序学习之自定义滚动弹窗
2020/12/20 Javascript
python结合opencv实现人脸检测与跟踪
2015/06/08 Python
Python for Informatics 第11章之正则表达式(二)
2016/04/21 Python
Python两个内置函数 locals 和globals(学习笔记)
2016/08/28 Python
Python自定义类的数组排序实现代码
2016/08/28 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
django 读取图片到页面实例
2020/03/27 Python
FitFlop澳大利亚官网:英国符合人体工学的鞋类品牌
2017/06/05 全球购物
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
党校培训自我鉴定
2014/02/01 职场文书
幼儿园保育员岗位职责
2014/04/13 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
2014年优质护理服务工作总结
2014/11/14 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
上课迟到检讨书
2015/05/06 职场文书