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
Mar 09 Javascript
ExtJs3.0中Store添加 baseParams 的Bug
Mar 10 Javascript
非常有用的40款jQuery 插件推荐(系列二)
Dec 25 Javascript
JavaScript中valueOf函数与toString方法深入理解
Dec 02 Javascript
jQuery之日期选择器的深入解析
Jun 19 Javascript
Jquery 实现checkbox全选方法
Jan 28 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
Oct 22 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
Dec 07 Javascript
BOM系列第二篇之定时器requestAnimationFrame
Aug 17 Javascript
详解React中的组件通信问题
Jul 31 Javascript
使用pkg打包Node.js应用的方法步骤
Oct 19 Javascript
js面试题之异步问题的深入理解
Sep 20 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的String类代码
2010/04/20 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
JQuery与iframe交互实现代码
2009/12/24 Javascript
基于Jquery的文字自动截取(提供源代码)
2011/08/09 Javascript
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
2013/07/09 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
利用javaScript实现点击输入框弹出窗体选择信息
2013/12/11 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
原生javascript实现无间缝滚动示例
2014/01/28 Javascript
javascript常见操作汇总
2014/09/03 Javascript
Javascript中For In语句用法实例
2015/05/14 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
Jquery实现的简单轮播效果【附实例】
2016/04/19 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
babel基本使用详解
2017/02/17 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
python绘制简单折线图代码示例
2017/12/19 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
用python写测试数据文件过程解析
2019/09/25 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
TCP/IP的分层模型
2013/10/27 面试题
通信工程毕业生求职信
2013/11/16 职场文书
集团薪酬管理制度
2014/01/13 职场文书
雷锋精神演讲稿
2014/05/13 职场文书
敬业奉献模范事迹材料(2016精选版)
2016/02/26 职场文书
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP