目录正文方法复制文本复制图片正文 复制文字和图片是我们经常会使用到的需求,我们这篇文章主要介绍使用navigator.clipboard.write()来实现复制文字和图片。不过这
复制文字和图片是我们经常会使用到的需求,我们这篇文章主要介绍使用navigator.clipboard.write()来实现复制文字和图片。不过这个属性是需要考虑浏览器的兼容性的,可以参考MDN
在很久之前我们是使用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 api,如果用户授予了相应的权限,其就能提供系统剪贴板的读写访问能力。在 WEB 应用程序中,Clipboard API 可用于实现剪切、复制和粘贴功能。
Clipboard提供了以下方法,方便我们读取剪切板的内容。
Promise
对象。在检索到数据后,promise 将兑现一个 ClipboardItem
对象的数组来提供剪切板数据。Promise
,在从剪切板中检索到文本后,promise 将兑现一个包含剪切板文本数据的 DOMString
。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('图片复制失败!');
});
}
--结束END--
本文标题: vue实现复制文字复制图片实例详解
本文链接: https://lsjlt.com/news/197231.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-01-12
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0