我正在建立一个叫做“HTML测试”的东西。它完全运行在JavaScript上,非常酷。
最后,会弹出一个结果框,上面写着“你的结果”,它显示了他们花了多少时间,他们得到了多少百分比,以及他们在10道题中得到了多少道。我想有一个按钮,说“捕获结果”,让它以某种方式截图或div的东西,然后只显示在页面上捕获的图像,他们可以右键单击并“另存图像为”。
我真的很愿意这样做,这样他们就可以与他人分享他们的成果。我不希望他们“复制”结果,因为他们可以很容易地改变结果。如果他们改变了图片上的内容,那好吧。
有人知道怎么做吗?
这是@Dathan的答案的扩展,使用html2canvas和FileSaver.js。
$(function() {
$("#btnSave").click(function() {
html2canvas($("#widget"), {
onrendered: function(canvas) {
theCanvas = canvas;
canvas.toBlob(function(blob) {
saveAs(blob, "Dashboard.png");
});
}
});
});
});
该代码块等待id为btnSave的按钮被单击。当它是时,它将小部件div转换为画布元素,然后使用saveAs() FileSaver接口(在本机不支持它的浏览器中通过FileSaver.js)将div保存为名为“Dashboard.png”的图像。
这种工作的一个例子是在这小提琴。
添加到你的html文件和id="capture"到你想截图的div
<a id="btn-Convert-Html2Image" href="#">Download</a>
<script src="capture.js"></script>
<script src="https://html2canvas.hertzen.com/dist/html2canvas.js" type="text/javascript"></script>
在capture.js中添加:
document.getElementById("btn-Convert-Html2Image").addEventListener("click", function() {
html2canvas(document.getElementById("capture")).then(function (canvas) {
var anchorTag = document.createElement("a");
anchorTag.download = "filename.jpg";
anchorTag.href = canvas.toDataURL();
anchorTag.target = '_blank';
anchorTag.click();
});
});
然后,只需按下下载键,它就会下载截图
或者您可以通过添加查看截图img
<div id="previewImg"></div>
在HTML代码中是你想要查看img和js代码的地方
document.getElementById("btn-Convert-Html2Image").addEventListener("click", function() {
html2canvas(document.getElementById("capture")).then(function (canvas) {
var anchorTag = document.createElement("a");
document.body.appendChild(anchorTag);
document.getElementById("previewImg").appendChild(canvas);
anchorTag.click();
});
});
在index.html中添加此脚本
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.min.js"></script>
使用此函数获取div标签的截图
getScreenShot(){
let c = this.elem.nativeElement.querySelector('.chartContainer'); // or document.getElementById('canvas');
html2canvas(c).then((canvas:any)=>{
var t = canvas.toDataURL().replace("data:image/png;base64,", "");
this.downloadBase64File('image/png',t,'image');
})
}
downloadBase64File(contentType:any, base64Data:any, fileName:any) {
const linkSource = `data:${contentType};base64,${base64Data}`;
const downloadLink = document.createElement("a");
downloadLink.href = linkSource;
downloadLink.download = fileName;
downloadLink.click();
}