vue實現(xiàn)復制文字復制圖片實例詳解
目錄
- 正文
- 方法
- 復制文本
- 復制圖片
正文
復制文字和圖片是我們經常會使用到的需求,我們這篇文章主要介紹使用navigator.clipboard.write()來實現(xiàn)復制文字和圖片。不過這個屬性是需要考慮瀏覽器的兼容性的,可以參考MDN
document.execCommand('copy')
在很久之前我們是使用document.execCommand('copy')來實現(xiàn)復制文本的,但是現(xiàn)在mdn上已經將這個命令廢棄了。
當一個 HTML 文檔切換到設計模式時,document暴露 execCommand 方法,該方法允許運行命令來操縱可編輯內容區(qū)域的元素。如果傳入copy命令,那么就能實現(xiàn)復制的功能。
比如像下面這樣
// 復制文字
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 接口實現(xiàn)了 Clipboard API,如果用戶授予了相應的權限,其就能提供系統(tǒng)剪貼板的讀寫訪問能力。在 Web 應用程序中,Clipboard API 可用于實現(xiàn)剪切、復制和粘貼功能。
方法
Clipboard提供了以下方法,方便我們讀取剪切板的內容。
- read():從剪貼板讀取數(shù)據(比如圖片),返回一個
Promise對象。在檢索到數(shù)據后,promise 將兌現(xiàn)一個ClipboardItem對象的數(shù)組來提供剪切板數(shù)據。 - readText():從操作系統(tǒng)讀取文本;返回一個
Promise,在從剪切板中檢索到文本后,promise 將兌現(xiàn)一個包含剪切板文本數(shù)據的DOMString。 - write(): 寫入任意數(shù)據至操作系統(tǒng)剪貼板。這是一個異步操作,在操作完成后,返回的 promise 的將被兌現(xiàn)。
- writeText(): 寫入文本至操作系統(tǒng)剪貼板。返回一個
Promise,在文本被完全寫入剪切板后,返回的 promise 將被兌現(xiàn)。
復制文本
復制文本的方法很簡單,就是使用navigator.clipboard.writeText()方法。
具體代碼實現(xiàn)如下:
copyTextToClipboard(text) {
return new Promise((resolve, reject) => {
navigator.clipboard.writeText(text).then(
() => {
resolve(true)
},
() => {
reject(new Error("復制失敗"))
}
)
})
}
復制圖片
復制圖片主要用到navigator.clipboard.write()方法。 因為我們在頁面中通常是要根據一個img元素復制圖片,主要實現(xiàn)思路如下:
- 先將
img元素轉成base64 - 再將
base64轉成blob對象 - 根據
blob對象new一個ClipboardItem對象 - 最后再根據
navigator.clipboard.writeText()將內容寫入剪貼板中
具體代碼實現(xiàn)如下:
// 圖片元素轉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實現(xiàn)復制文字復制圖片實例詳解的詳細內容,更多關于vue復制文字圖片的資料請關注其它相關文章!

網公網安備