html2canvas页面滚动内容截图并下载
2021-04-16 09:52 盛世游侠 阅读(700) 评论(0) 收藏 举报<!--div转成图片并下载-->
<script src="./js/html2canvas.min.js"></script>
<script>
// edited from https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob#Polyfill
var dataURIToBlob = function (imgName, dataURI, callback) {
var binStr = atob(dataURI.split(',')[1]),
len = binStr.length,
arr = new Uint8Array(len);
for (var i = 0; i < len; i++) {
arr[i] = binStr.charCodeAt(i);
}
callback(imgName, new Blob([arr]));
}
var callback = function (imgName, blob) {
var triggerDownload = $("<a>").attr("href", URL.createObjectURL(blob)).attr("download", imgName).appendTo("body").on("click", function () {
if (navigator.msSaveBlob) {
return navigator.msSaveBlob(blob, imgName);
}
});
triggerDownload[0].click();
triggerDownload.remove();
};
function createImg() {
var getPixelRatio = function (context) { // 获取设备的PixelRatio
var backingStore = context.backingStorePixelRatio ||
context.webkitBackingStorePixelRatio ||
context.mozBackingStorePixelRatio ||
context.msBackingStorePixelRatio ||
context.oBackingStorePixelRatio ||
context.backingStorePixelRatio || 0.5;
return (window.devicePixelRatio || 0.5) / backingStore;
};
//生成的图片名称
var imgName = "cs.png";
var shareContent = document.getElementsByTagName("body")[0];
let scale = 3;
var opts = {
//scale: scale,
/*canvas: canvas,
width: width,
height: height,*/
dpi: window.devicePixelRatio,
useCORS: true, // 【重要】开启跨域配置
//width: window.screen.availWidth, //显示的canvas窗口的宽度
//height: window.screen.availHeight, //显示的canvas窗口的高度
width: window.document.body.offsetWidth, //获取当前网页的宽度
height: window.document.body.offsetHeight, //获取当前网页的高度
windowWidth: document.body.scrollWidth, //获取X方向滚动条内容
windowHeight: document.body.scrollHeight, //获取Y方向滚动条内容
x: 0, //页面在水平方向没有滚动,故设置为0
y: window.pageYOffset //页面在垂直方向的滚动距离
};
html2canvas(shareContent, opts).then(function (canvas) {
const context = canvas.getContext("2d");
// 【重要】关闭抗锯齿 https://segmentfault.com/a/1190000011478657
context.imageSmoothingEnabled = false;
context.webkitImageSmoothingEnabled = false;
context.msImageSmoothingEnabled = false;
context.imageSmoothingEnabled = false;
let imgUrl = canvas.toDataURL("image/png").replace("image/png","image/octet-stream");
//console.log("imgUrl",imgUrl);
dataURIToBlob(imgName, imgUrl, callback);
});
}
</script>
其实滚动不滚动无所谓,只要截图的元素不是视口元素,而是包裹滚动内容的元素,就可以截全了。
浙公网安备 33010602011771号