實現html2canvas超長截圖


滾動截圖

項目需求要進行動態的滾動截圖搜索一下發現html2canvas可以實現截圖,但是滾動截圖網上搜羅了一遍發現不是很完善所以記錄下

  • 首先npm一下安裝依賴: npm install html2canvas
  • 再需要的頁面引入: html2canvas from html2canvas
  • 第三步使用: 直接貼代碼
/**
 * @description 截圖函數
 * @params {...Array} 1、DomObj: 需要進行截圖的Dom節點; 2、fileName: 截圖命名;3、ops: html2canvas配置項;4、計算的截圖寬度;
 *
**/
downloadImg = (DomObj, fileName, ops = {}, width) => {
  return new Promise(resolve => {
    setTimeout(() => {
      // 復刻需要滾動截圖的Dom, 要在改復制的Dom節點加滾動條, 否則會截圖失敗 🔔🔔🔔
      let copyDom = null;
      const copyOps = ops;
      // 檢查寬度是否大於項目全屏寬度
      let copyWidth = null;
      let flag = false;
      if (width < 1803) {
        copyWidth = 1803;
        flag = false;
      } else {
        copyWidth = width;
        flag = true;
        copyDom = obj.cloneNode(true);
        copyDom.style.width = `${copyWidth + 50}px`;
        copyDom.style.height = `${obj.scrollHeight + 50}px`;
        // 設置配置項 1、scale: 瀏覽器縮放值;2、width: 圖片寬度;3、height: 圖片高度; 4、x(scrollLeft) || y(scrollTop): 滾動軸的起始位置
        copyOps.scale = window.devicePixelRatio;
        copyOps.width = copyWidth + 50;
        copyOps.height = obj.scrollHeight + 50;
        copyDom.x = obj.scrollLeft;
        // 設置ID為復刻Dom添加樣式;
        copyDom.id = 'copyDom';
        // 將復刻元素插入HTML中
        document.querySelector('body').appendChild(copyDom);
      }
      html2canvas(flag ? copyDom : obj, copyOps).then(canvas => {
        const saveUrl = canvas.toDateURL('image/png');
        const aLink = document.createElement('a');
        aLink.href = saveUrl;
        aLink.download = fileName || '圖片';
        aLink.click();
        if (flag) {
          // 🛀
          copyDom.parentNode.removeChild(copyDom);
        }
        aLink.parentNode.removeChild(aLink);
      })
      resolve('success');
    }, 1)
  })
}
  • 最后成功:如下圖
    image

Remark: 要注意的點有二

  • 一是哪個Dom節點要滾動截圖就在該Dom節點加滾動條
  • 二是配置項設置滾動條初始位值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM