html2canvas生成的图片偏移不完整的解决方法


Posted in HTML / CSS onMay 19, 2020

情景一:

问题背景:生成的图片在一个弹窗里面,如果页面没有滚动条就是正常的,但是一旦出现滚动条并且页面发生滚动时html2canvas绘制成的图片就会偏移出对应滚动高度的白边,如下:

html2canvas生成的图片偏移不完整的解决方法
 

解决办法
 

楼主查了很多资料,也用了很多方法都没能解决这个问题,一气之下打算研究研究html2canvas的配置参数,果不其然,在配置参数RenderOptions下找到如下配置

html2canvas生成的图片偏移不完整的解决方法
 

眼尖的楼主立马发现了scrollY这个东西。没错,这个肯定是配置偏移量的对吧,既然你是向下偏移我页面滚动的高度,那我把scrollY设置为负的那不就好了吗,说干就干。于是楼主设置了{scrollY: -window.pageYOffset},结果发生诡异的事,它倒是不向下偏移了,却开始向上偏移,如下

html2canvas生成的图片偏移不完整的解决方法
 

这个世界是怎么了,于是楼主又设置{scrollY: 0},再次查看,解决了。
 

html2canvas生成的图片偏移不完整的解决方法
 

原来,是因为在不设置scrollY的情况下,canvas绘制页面时会根据全局页面的滚动情况自动向下偏移。当然了,scrollX也是一样的道理。

奉上代码:
 

scrollY: 0, 其他的参数根据自己情况配置,这个参数一定不能少

var htmlDom = document.getElementsByClassName('dialog_content')[0];

html2canvas(htmlDom, {
    logging: false, //日志开关,便于查看html2canvas的内部执行流程
    width: htmlDom.clientWidth, //dom 原始宽度
    height: htmlDom.clientHeight,
    scrollY: 0, 
    scrollX: 0,
    useCORS: true // 【重要】开启跨域配置
}).then(canvas => {
    var url = canvas.toDataURL();//图片地址
    htmlDom.appendChild(canvas);
});

情景二:
 

用html2canvas绘制完图片后,始终会有个偏移距离,之前的解决办法是设scrollY: 0,scrollX: 0这两个参数为0,但是这次怎么弄都不行,最后排查出的原因是因为绘制的box上加了transform:translateX(-50%)这个样式。

解决办法:

用户绘图的区域不用transform来定位,换一种没有偏移的方式,比如设置百分比或者固定宽高。

到此这篇关于html2canvas生成的图片偏移不完整的解决方法的文章就介绍到这了,更多相关html2canvas生成图片偏移内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

HTML / CSS 相关文章推荐
CSS3教程(3):border-color网页边框色彩
Apr 02 HTML / CSS
实例讲解CSS3中的box-flex弹性盒属性布局
Jun 09 HTML / CSS
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
Jan 12 HTML / CSS
详解CSS3中字体平滑处理和抗锯齿渲染
Mar 29 HTML / CSS
HTML5新控件之日期和时间选择输入的实现代码
Sep 13 HTML / CSS
html通过canvas转成base64的方法
Jul 18 HTML / CSS
html5 学习简单的拾色器
Sep 03 HTML / CSS
关于 HTML5 的七个传说小结
Apr 12 HTML / CSS
HTML5+CSS3应用详解
Feb 24 HTML / CSS
html5定位获取当前位置并在百度地图上显示
Aug 22 HTML / CSS
深入探究HTML5的History API
Jul 09 HTML / CSS
详解盒子端CSS动画性能提升
May 24 HTML / CSS
html5简介及新增功能介绍
May 18 #HTML / CSS
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
May 14 #HTML / CSS
Html5在手机端调用相机的方法实现
May 13 #HTML / CSS
Html5页面获取微信公众号的openid的方法
May 12 #HTML / CSS
钉钉企业内部H5微应用开发详解
May 12 #HTML / CSS
html5 横向滑动导航栏的方法示例
May 08 #HTML / CSS
HTML5触摸事件(touchstart、touchmove和touchend)的实现
May 08 #HTML / CSS
You might like
PHP CURL获取返回值的方法
2014/05/04 PHP
php.ini save_handler 修改不生效的解决办法
2014/07/22 PHP
php调用shell的方法
2014/11/05 PHP
php计算2个日期的差值函数分享
2015/02/02 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
JQuery select(下拉框)操作方法汇总
2015/04/15 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
2016/10/29 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
ptyhon实现sitemap生成示例
2014/03/30 Python
使用Python的PEAK来适配协议的教程
2015/04/14 Python
python 3利用BeautifulSoup抓取div标签的方法示例
2017/05/28 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
2018/01/10 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
Python any()函数的使用方法
2019/10/28 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
python自定义函数def的应用详解
2020/06/03 Python
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
煤矿安全演讲稿
2014/05/09 职场文书
聘用意向书
2014/07/29 职场文书
作风大整顿心得体会
2014/09/10 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
入党积极分子个人总结
2015/03/02 职场文书
酒店仓管员岗位职责
2015/04/01 职场文书