记⼀次修改html2canvas源码
后台管理系统中,引⼊ html2canvas 制作封⾯图,结果总是出现位置的偏差。
经过刨源码发现,clone 出来的元素与源元素的位置产⽣了偏差,具体原因不明。
临时⽅案,缓存源元素的位置信息,在获取 clone 元素的位置信息时,判定是否产⽣了偏差,如果有偏差则记录。最终计算所有节点的位置信息时,减去偏差的值。
// 100 ⾏左右 Bounds.fromClientRect ⽅法
Bounds.fromClientRect = function(clientRect) {
// #start fixed by hxy 补充⼀下误差
var left = clientRect.left
if (window._html2canvas_diff_) {
left = clientRect.left - window._html2canvas_diff_
}
// #end
return new Bounds(left, p, clientRect.width, clientRect.height);
};
// 4535 ⾏左右 parseTree ⽅法
var parseTree = function(element) {
// #start fixed by hxy 缓存⼀下误差
var rootElementRect = BoundingClientRect()
if (rootElementRect.left !== window._html2canvas_.left) {
window._html2canvas_diff_ = rootElementRect.left - window._html2canvas_.left
} else {
window._html2canvas_diff_ = 0
}
// #end
var container = createContainer(element);
container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */ ;
parseNodeTree(element, container, container);
return container;
};
// 6960 ⾏左右 renderElement ⽅法 case 0
ownerDocument = element.ownerDocument;
if (!ownerDocument) {
throw new Error("Element is not attached to a Document");
}
defaultView = ownerDocument.defaultView;
error parse newif (!defaultView) {
throw new Error("Document is not attached to a Window");
}
instanceName = (und(Math.random() * 1000) + w()).toString(16);
_a = isBodyElement(element) || isHTMLElement(element) ? parseDocumentSize(ownerDocument) : parseBounds(element), width =
_a.width, height = _a.height, left = _a.left, top = _a.top;
// #start fixed by hxy 在这⾥缓存下真实的 DOM 位置
window._html2canvas_ = _a
// #end
defaultResourceOptions = {
allowTaint: false,
imageTimeout: 15000,
proxy: undefined,
useCORS: false
};

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。