在实现“截图”功能时,遇到几个bug,研究了一个上午,终于全部解决了;

下面给大家分享下:

1、"图片资源跨域",导致无法截图。

浏览器会提示下面的错误

DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.

解决方案:将跨域图片转换成base64,然后使用base64渲染img标签;具体方法:http://www.cnblogs.com/minigrasshopper/p/9042686.html

2、截图不完整(宽度方向偶尔不完全)

需要截图的容器,必须渲染在页面中才可以,也就是说挂在DOM树上(display: none;这样是不行的);

由于被截图的容器,我不想让它展示在视图中,所以我写了如下样式

.capture{
position: absolute;
opacity: ;
z-index: -;
}

但是,发现截图偶尔宽度不完整,原因很简单,因为被截图的容器超出了“视口”的可视范围(定位的问题);

总结:被截图的容器,必须挂在“DOM树”上,并且必须在“视口”范围中;

对样式做修改,改成fixed,这样相对于body定位;同时设置left、top;(如果被截图的容器高度超出了视口,那就再说吧)

.capture{
position: fixed;
opacity: ;
z-index: -;
left: ;
top: ;
}

3、文本样式错乱

下面的代码,在html2canvas截图后,发现p标签的样式正确;h6标签的样式不对

原因:canvas绘制中,会将h6的换行绘制进去;

解决方法:标签和内容之间不换行,如P标签

<p></p>
<h6> </h6>

JS 使用html2canvas实现截图功能的问题记录和解决方案的更多相关文章

  1. canvas与html5实现视频截图功能

    这段时间一直在研究canvas,突发奇想想做一个可以截屏视频的功能,然后把图片拉去做表情包,哈哈哈哈哈哈~~ 制作方法: 1.在页面中加载视频 在使用canvas制作这个截图功能时,首先必须保证页面上 ...

  2. html2canvas 网页截图 下载 上传

    利用html2canvas插件 对网页截图 并下载和上传图片. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//E ...

  3. 基于java的后台截图功能的实现

    Java后台截图功能的实现 背景介绍: 在近期开发的可视化二期项目中的邮件项目中,邮件中的正文中含有图片.该图片的产生是将一些html网页转为图片格式,刚开始考虑使用第三方组件库html2image和 ...

  4. HTMLTESTRunner自动化测试报告增加截图功能

    我们都知道HTMLTESTRunner自动化测试报告,是Unittest单元测试框架报告,那么在做ui测试的时候就有点不适用了. 我们需要出错截图功能. 以下是我改的,增加了截图功能,先展示界面,再展 ...

  5. 通过jcrop和canvas的画布功能完成对图片的截图功能与视频的截图功能实现

    最近因为工作需要,做了视频截图和图截图的功能.大概需求是,用户点击某个按钮,可以对图片区域进行部分截取,然后进行进一步的业务操作. 首先说图片截图功能的思路, (1)下载Jcrop插件,添加css和j ...

  6. Cesium截图功能

    首先安装  canvas2image npm intsall canvas2image --save 因为项目基于vue,所以需要在canvas2image的最后面 加上 export default ...

  7. 记一次"截图"功能的项目调研过程!

    目录 项目需求 功能调研 AWT Swing Html2Image PhantomJS Headless Chrome 实现方案 结论 项目需求 最近,项目接到了一个新需求,要求对指定URL进行后端模 ...

  8. 【转】js实现复制到剪贴板功能,兼容所有浏览器

    两天前听了一个H5的分享,会议上有一句话,非常有感触:不是你不能,而是你对自己的要求太低.很简单的一句话,相信很多事情不是大家做不到,真的是对自己的要求太低,如果对自己要求多一点,那么你取得的进步可能 ...

  9. 【原】js实现复制到剪贴板功能,兼容所有浏览器

    两天前听了一个H5的分享,会议上有一句话,非常有感触:不是你不能,而是你对自己的要求太低.很简单的一句话,相信很多事情不是大家做不到,真的是对自己的要求太低,如果对自己要求多一点,那么你取得的进步可能 ...

随机推荐

  1. pycharm如何设置python版本、设置国内pip镜像、添加第三方类库

    直接上图(mac环境): 一.设置项目的python版本 File->Default Settings ... 在弹出的界面上(参考下图),左上角的下拉框里,选择python解释器的版本即可(建 ...

  2. javax.crypto.BadPaddingException: Given final block not properly padded解决方案

    解密的时候报错: javax.crypto.BadPaddingException:   Given   final   block   not   properly   padded 该异常是在解密 ...

  3. Use Multiple log4net Outputs from One Application

    Introduction This is an article simply to demonstrate how to use several output log files depending ...

  4. WPF背景图

    方法一:xaml中:<控件>  <控件.Background><ImageBrush ImageSource="/程序集;component/images/xx ...

  5. IDependency自动注册autofac

    ContainerBuilder builder = new ContainerBuilder(); builder.RegisterGeneric(typeof(Repository<,> ...

  6. eclipse alt+/智能提示错误问题

    转自: https://blog.csdn.net/u013066244/article/details/69054447

  7. 用PowerShell的命令行检查文件的校验MD5 SHA1 SHA256

    certutil -hashfile yourfilename.ext MD5 certutil -hashfile yourfilename.ext SHA1 certutil -hashfile ...

  8. android中Textview 和图片同时显示时,文字省略号显示,图片自动靠到右边

    很纠结的一个标题,实在是不知道怎么去描述这个现象. 上图片吧,先看看需求是什么样的. 1.需求: ​ 视频与票的图标跟在标题后面显示,当标题过长时icon显示到省略号…后(textview省略号显示, ...

  9. 谈谈MySQL死锁 一

    数据越来越和我们的生活离不开,数据在生命周期的各个阶段有着不同的痛点和需求以及特殊场景. CURD是数据的四大基本需求:写入,更新,读取,删除. 今天,来谈一谈死锁问题 死锁是高并发下MySQL不可回 ...

  10. 有关volatile关键字和transient关键字

    (1)volatile关键字['vɑlətl]的作用 让变量每次在使用的时候,都从主存中取,而不是从各个线程的“工作内存”. 也就是说,volatile变量对于每次使用,线程都能得到当前volatil ...