<!--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, height: height,*/ dpi: window.devicePixelRatio, useCORS: true, // 【重要】开启跨域配置 // window.screen.availWidth, //显示的canvas窗口的宽度 //height: window.screen.availHeight, //显示的canvas窗口的高度 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>
其实滚动不滚动无所谓,只要截图的元素不是视口元素,而是包裹滚动内容的元素,就可以截全了。