当div的位置是绝对的时获取屏幕截图

时间:2013-11-24 21:48:24

标签: jquery html2canvas

div的位置是绝对的时候如何进行排版? 我收到错误:“未捕获的IndexSizeError:索引或大小为负数,或大于允许值” 我想添加png图像,一个是另一个,所以我使用了z-index
我的HTML:

<div id="divFrame">
        <img id="frame">
        <div id="zoom" class="zoomProps" ><img id="polaroid"/> </div>
 </div>

CSS:

.zoomProps {
top: 0;
left: 0;
width: 100%;
z-index: 2;
position: absolute;
 }
 #frame {
left: 0;
top: 0;
width: 100%;
z-index: 3;
pointer-events: none;
position: absolute;
   }

JQuery的:

 html2canvas(document.getElementById('divFrame'), {
onrendered: function(canvas) {
    var img = canvas.toDataURL();
    $("#yemekPageImgFullScreen").attr('src', img);
    $("#popupBasic").popup();
    $("#popupBasic").popup('open');
}
   });

2 个答案:

答案 0 :(得分:1)

重复:已经询问/回答here

引用了anwer:

Thishtml2canvas错误报告。

我能够通过修补html2canvas.js文件修复未捕获的错误:IndexSizeError:DOM异常1

替换这个:

ctx.drawImage(canvas, bounds.left, bounds.top, bounds.width, bounds.height, 0, 0, bounds.width, bounds.height);

由此:

var imgData = canvas.getContext("2d").getImageData(bounds.left, bounds.top, bounds.width, bounds.height);
ctx.putImageData(imgData, 0, 0);

答案 1 :(得分:1)

寻找解决方案很长时间之后。我知道为什么Div使用样式绝对位置时库html2canvas无法正确捕获屏幕。

当您将div的样式位置设置为:绝对时。 div的图像背景保留在其原始位置(例如top:100,left:300)。但是html2canvas会将您封装的元素克隆到iframe中,该位置的起始位置为top:0,left:0。然后html2canvas在iframe的top:0,left:0处开始捕获图像像素。

这是我的解决方案的简单逻辑,用于移动绝对div而不让用户知道它已移动。我将绝对div克隆到新div,该新div将不透明度设置为0.0,并将id设置为“ content-capture”。然后将其样式设置为left:0并调用html2canvas函数。

$('body').append("<div id='capture-area' style='opacity: 0.0;'></div>");
$('.wall-snap').clone().attr('id','content-capture').appendTo('#capture-area');
$('#content-capture').css('left', 0);

html2canvas($('#content-capture')[0], {
    letterRendering: 1,
    allowTaint: true,
    useCORS: true,
}).then(canvas => {
    var a = document.createElement('a');
    a.href = canvas.toDataURL("image/jpeg").replace("image/jpeg", "image/octet-stream");
    a.download = 'somefilename.jpg';
    a.click();
    $('#content-capture').remove();
});