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');
}
});
答案 0 :(得分:1)
重复:已经询问/回答here。
引用了anwer:
This是html2canvas
错误报告。
我能够通过修补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();
});