Skip to content

Instantly share code, notes, and snippets.

@simonmysun
Last active September 19, 2017 09:49
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save simonmysun/c6da13ce2827a374e71ccf07d9f08e2d to your computer and use it in GitHub Desktop.
Save simonmysun/c6da13ce2827a374e71ccf07d9f08e2d to your computer and use it in GitHub Desktop.
render hidden / invisible area with html2canvas
var toImg = function toImg(targetNode) {
var tmpNode = function recreateNode(node) {
switch (node.nodeType) {
case 1:
{
var result = document.createElement(node.nodeName);
var style = getComputedStyle(node);
for (var i = style.length - 1; i >= 0; i -= 1) {
result.style[style[i]] = style[style[i]];
}
switch (node.nodeName) {
case 'IMG':
{
result.setAttribute('src', node.getAttribute('src'));
break;
}
default:
{
break;
}
}
var child = node.firstChild;
while (child !== null) {
result.appendChild(recreateNode(child));
child = child.nextSibling;
}
return result;
}
case 3:
{
return document.createTextNode(node.textContent);
}
default:
{
break;
}
}
return false;
}(targetNode);
var tmpNodeContainer = document.createElement('iframe');
tmpNodeContainer.src = 'about:blank';
document.body.append(tmpNodeContainer);
tmpNodeContainer.contentWindow.document.body.append(tmpNode);
tmpNode.style.overflow = 'visible';
tmpNode.style.height = 'auto';
tmpNodeContainer.style.transform = 'scale(0)';
html2canvas(tmpNode).then(function (canvas) {
document.body.removeChild(tmpNodeContainer);
var img = document.createElement('img');
img.src = canvas.toDataURL('image/png');
document.body.append(img);
});
};
@jasonz1987
Copy link

这段代码的意思是将全部元素写入到iframe 来实现全部截图吗?

代码里的fakePreview 和 fakePreviewContainer 是什么?

@simonmysun
Copy link
Author

simonmysun commented Mar 9, 2017

回复在这里怎么也没个通知啥的

变量名是我当时用了好几个乱七八糟变量把最后的内容一层一层装起来,然后慢慢删成这样的。现在看我应该是复制错代码了。。。

我把它更新了一下。你再看看?

@jasonz1987

@simonmysun
Copy link
Author

其实这个只满足我当时的需求,比方说只处理了 img 的属性,别的都没管

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment