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 相关文章推荐
ext for eclipse插件安装方法
Apr 27 Javascript
通过身份证号得到出生日期和性别的js代码
Nov 23 Javascript
jquery绑定事件不生效的解决方法
Feb 11 Javascript
js对象继承之原型链继承实例
Jan 10 Javascript
jquery实现简易的移动端验证表单
Nov 08 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
Dec 31 Javascript
在JavaScript中call()与apply()区别
Jan 22 Javascript
Ubuntu系统下Angularjs开发环境安装
Sep 01 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
Jan 12 Javascript
Vue框架TypeScript装饰器使用指南小结
Feb 18 Javascript
vue实现文字横向无缝走马灯组件效果的实例代码
Apr 09 Javascript
微信小程序实现发微博功能的示例代码
Jun 24 Javascript
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 expects parameter 1 to be resource, array given 错误
2011/03/23 PHP
php获取远程文件的内容和大小
2015/11/03 PHP
php将文件夹打包成zip文件的简单实现方法
2016/10/04 PHP
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
js为什么不能正确处理小数运算?
2015/12/29 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
2016/02/26 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
jQuery图片缩放插件smartZoom使用实例详解
2017/08/25 jQuery
Angular4学习笔记之根模块与Ng模块
2017/09/09 Javascript
Bootstrap实现翻页效果
2017/11/27 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
Python里disconnect UDP套接字的方法
2015/04/23 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
python 按不同维度求和,最值,均值的实例
2018/06/28 Python
Python字符串格式化输出代码实例
2019/11/22 Python
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
文化宣传方案
2014/03/13 职场文书
简历中自我评价范文
2015/03/11 职场文书
自主招生自荐信怎么写
2015/03/24 职场文书
撤诉申请怎么写
2015/05/19 职场文书
退休欢送会致辞
2015/07/31 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python