亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

vue實現復制文字復制圖片實例詳解

瀏覽:126日期:2022-06-01 14:17:04
目錄
  • 正文
  • 方法
  • 復制文本
  • 復制圖片

正文

復制文字和圖片是我們經常會使用到的需求,我們這篇文章主要介紹使用navigator.clipboard.write()來實現復制文字和圖片。不過這個屬性是需要考慮瀏覽器的兼容性的,可以參考MDN

document.execCommand('copy')

在很久之前我們是使用document.execCommand('copy')來實現復制文本的,但是現在mdn上已經將這個命令廢棄了。

當一個 HTML 文檔切換到設計模式時,document暴露 execCommand 方法,該方法允許運行命令來操縱可編輯內容區域的元素。如果傳入copy命令,那么就能實現復制的功能。

比如像下面這樣

  // 復制文字
  copyText(link, cb) {
    let input = document.createElement("textarea");
    input.style.cssText = "position: absolute; top: 0; left: 0; opacity: 0; z-index: -10;";
    input.value = link;
    document.body.appendChild(input);
    input.select();
    document.execCommand("copy");
    document.body.removeChild(input);
    if (typeof cb === "function") {
      cb();
    }
  }

Clipboard

Clipboard 接口實現了 Clipboard API,如果用戶授予了相應的權限,其就能提供系統剪貼板的讀寫訪問能力。在 Web 應用程序中,Clipboard API 可用于實現剪切、復制和粘貼功能。

方法

Clipboard提供了以下方法,方便我們讀取剪切板的內容。

  • read():從剪貼板讀取數據(比如圖片),返回一個 Promise對象。在檢索到數據后,promise 將兌現一個 ClipboardItem對象的數組來提供剪切板數據。
  • readText():從操作系統讀取文本;返回一個 Promise,在從剪切板中檢索到文本后,promise 將兌現一個包含剪切板文本數據的 DOMString
  • write(): 寫入任意數據至操作系統剪貼板。這是一個異步操作,在操作完成后,返回的 promise 的將被兌現。
  • writeText(): 寫入文本至操作系統剪貼板。返回一個 Promise,在文本被完全寫入剪切板后,返回的 promise 將被兌現。

復制文本

復制文本的方法很簡單,就是使用navigator.clipboard.writeText()方法。

具體代碼實現如下:

copyTextToClipboard(text) {
  return new Promise((resolve, reject) => {
    navigator.clipboard.writeText(text).then(
      () => {
resolve(true)
      },
      () => {
reject(new Error("復制失敗"))
      }
    )
  })
}

復制圖片

復制圖片主要用到navigator.clipboard.write()方法。 因為我們在頁面中通常是要根據一個img元素復制圖片,主要實現思路如下:

  • 先將img元素轉成base64
  • 再將base64轉成blob對象
  • 根據blob對象new一個ClipboardItem對象
  • 最后再根據navigator.clipboard.writeText()將內容寫入剪貼板中

具體代碼實現如下:

  // 圖片元素轉base64
  getBase64Image(img) {
    let canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;
    let ctx = canvas.getContext("2d");
    ctx?.drawImage(img, 0, 0, img.width, img.height);
    let dataURL = canvas.toDataURL("image/png");
    return dataURL;
  },
  // base64圖片轉為blob
  getBlobImage(dataurl) {
    let arr = dataurl.split(",");
    let mime = arr[0].match(/:(.*?);/)[1];
    let bstr = atob(arr[1]);
    let n = bstr.length;
    let u8arr = new Uint8Array(n);
    while (n--) {
      u8arr[n] = bstr.charCodeAt(n);
    }
    return new Blob([u8arr], { type: mime });
  },
  // 復制圖片
  copyImage(dom, cb) {
    let dataurl = this.getBase64Image(dom);
    let blob = this.getBlobImage(dataurl);
    navigator.clipboard.write([
      new window.ClipboardItem({
[blob.type]: blob
      })
    ]).then(function() {
      if (typeof cb === "function") {
cb();
      }
    }, function() {
      console.log("圖片復制失敗!");
    });
  }

以上就是vue實現復制文字復制圖片實例詳解的詳細內容,更多關于vue復制文字圖片的資料請關注其它相關文章!

標簽: JavaScript
主站蜘蛛池模板: 婷婷亚洲国产成人精品性色 | 国产欧美精品一区二区三区 | 日本三级无码中文字幕 | 免费在线国产视频 | 免费观看欧美一级特黄 | 91精品国产肉丝高跟在线 | 亚洲一区不卡视频 | 免费看黄资源大全高清 | 免费特黄| 激情丝袜欧美专区在线观看 | 国产在线爱做人成小视频 | 国产伊人精品 | 国产毛片高清 | 91麻豆精品视频 | 国产成人深夜福利短视频99 | 97精品国产高清自在线看超 | 国产精品久久久亚洲第一牛牛 | 91精品国产乱码久久久久久 | 国内精品视频 | 有色影院 | 女人洗澡一级毛片一级毛片 | 亚洲国产欧美日韩精品一区二区三区 | 国产不卡在线蜜 | 黄色免费一级 | 国产欧美日韩精品综合 | 黄在线看 | 日韩精品亚洲专区在线观看 | 国产女女视屏免费 | 色狠狠成人综合色 | 在线视频一区二区三区四区 | 久久久精品久久视频只有精品 | 欧美一区二区三区在线观看不卡 | 国产成人亚洲精品乱码在线观看 | 成人做爰全过程免费的叫床看视频 | 丁香婷婷开心激情深爱五月 | 麻豆国产一区二区在线观看 | 国产亚洲精品色一区 | 亚洲激情综合网 | 又黄又爽的成人免费网站 | 996免费视频国产在线播放 | 黄色影视在线 |