91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue怎么實現復制文字和圖片

發布時間:2023-02-23 11:11:41 來源:億速云 閱讀:108 作者:iii 欄目:開發技術

本篇內容主要講解“vue怎么實現復制文字和圖片”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“vue怎么實現復制文字和圖片”吧!

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怎么實現復制文字和圖片”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

陵川县| 太和县| 大厂| 东阳市| 平阳县| 荣昌县| 富民县| 绵阳市| 徐州市| 临潭县| 义马市| 苏尼特左旗| 蕲春县| 肥西县| 华坪县| 松阳县| 凤凰县| 河间市| 湘阴县| 施甸县| 东乡族自治县| 资溪县| 聊城市| 昌平区| 伊金霍洛旗| 都匀市| 裕民县| 西丰县| 临泉县| 昔阳县| 台东县| 巴塘县| 蓬安县| 深圳市| 东海县| 海伦市| 阿勒泰市| 高清| 菏泽市| 定结县| 双城市|