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 相关文章推荐
用jquery实现学校的校历(asp.net+jquery ui 1.72)
Jan 01 Javascript
Jquery命名冲突解决的五种方案分享
Mar 16 Javascript
window.parent与window.openner区别介绍
Apr 12 Javascript
浅析js预加载/延迟加载
Sep 25 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
Dec 29 Javascript
JavaScript中的方法调用详细介绍
Dec 30 Javascript
kindeditor修复会替换script内容的问题
Apr 03 Javascript
jQuery多级联动下拉插件chained用法示例
Aug 20 Javascript
微信小程序实现给循环列表添加点击样式实例
Apr 26 Javascript
JS实现弹出下载对话框及常见文件类型的下载
Jul 13 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
Aug 08 Javascript
详解vue 组件注册
Nov 20 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
压力如何影响浓缩咖啡品质
2021/03/03 咖啡文化
php下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
2014/12/05 PHP
PHP+jQuery翻板抽奖功能实现
2015/10/19 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
利用Laravel事件系统如何实现登录日志的记录详解
2017/05/20 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
javascript教程之不完整的继承(js原型链)
2014/01/13 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
jQuery中fadeOut()方法用法实例
2014/12/24 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
JS正则表达式比较常见用法
2016/01/26 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
Vue.js学习教程之列表渲染详解
2017/05/17 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
thinkjs 文件上传功能实例代码
2017/11/08 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
2019/03/07 jQuery
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
Python实现SVN的目录周期性备份实例
2015/07/17 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
Python使用sax模块解析XML文件示例
2019/04/04 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
2020/10/15 Python
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
Internal修饰符有什么含义
2013/07/10 面试题
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
会计学习心得体会
2014/09/09 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书
Js类的构建与继承案例详解
2021/09/15 Javascript