vue怎么实现复制文字和图片

其他教程   发布日期:2023年07月01日   浏览次数:667

本篇内容主要讲解“vue怎么实现复制文字和图片”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue怎么实现复制文字和图片”吧!

document.execCommand('copy')

在很久之前我们是使用document.execCommand('copy')来实现复制文本的,但是现在mdn上已经将这个命令废弃了。

当一个 HTML 文档切换到设计模式时,

  1. document
暴露
  1. execCommand
方法,该方法允许运行命令来操纵可编辑内容区域的元素。如果传入copy命令,那么就能实现复制的功能。

比如像下面这样

  1. // 复制文字
  2. copyText(link, cb) {
  3. let input = document.createElement('textarea');
  4. input.style.cssText = 'position: absolute; top: 0; left: 0; opacity: 0; z-index: -10;';
  5. input.value = link;
  6. document.body.appendChild(input);
  7. input.select();
  8. document.execCommand('copy');
  9. document.body.removeChild(input);
  10. if (typeof cb === 'function') {
  11. cb();
  12. }
  13. }

Clipboard

  1. Clipboard
接口实现了 Clipboard API,如果用户授予了相应的权限,其就能提供系统剪贴板的读写访问能力。在 Web 应用程序中,Clipboard API 可用于实现剪切、复制和粘贴功能。

方法

Clipboard提供了以下方法,方便我们读取剪切板的内容。

  • read():从剪贴板读取数据(比如图片),返回一个

    1. Promise
    对象。在检索到数据后,promise 将兑现一个
    1. ClipboardItem
    对象的数组来提供剪切板数据。
  • readText():从操作系统读取文本;返回一个

    1. Promise
    ,在从剪切板中检索到文本后,promise 将兑现一个包含剪切板文本数据的
    1. DOMString
  • write(): 写入任意数据至操作系统剪贴板。这是一个异步操作,在操作完成后,返回的 promise 的将被兑现。

  • writeText(): 写入文本至操作系统剪贴板。返回一个

    1. Promise
    ,在文本被完全写入剪切板后,返回的 promise 将被兑现。

复制文本

复制文本的方法很简单,就是使用

  1. navigator.clipboard.writeText()
方法。

具体代码实现如下:

  1. copyTextToClipboard(text) {
  2. return new Promise((resolve, reject) => {
  3. navigator.clipboard.writeText(text).then(
  4. () => {
  5. resolve(true)
  6. },
  7. () => {
  8. reject(new Error('复制失败'))
  9. }
  10. )
  11. })
  12. }

复制图片

复制图片主要用到navigator.clipboard.write()方法。 因为我们在页面中通常是要根据一个img元素复制图片,主要实现思路如下:

  • 先将

    1. img元素
    转成
    1. base64
  • 再将

    1. base64
    转成
    1. blob对象
  • 根据

    1. blob对象
    new一个
    1. ClipboardItem
    对象
  • 最后再根据

    1. navigator.clipboard.writeText()
    将内容写入剪贴板中

具体代码实现如下:

  1. // 图片元素转base64
  2. getBase64Image(img) {
  3. let canvas = document.createElement('canvas');
  4. canvas.width = img.width;
  5. canvas.height = img.height;
  6. let ctx = canvas.getContext('2d');
  7. ctx?.drawImage(img, 0, 0, img.width, img.height);
  8. let dataURL = canvas.toDataURL('image/png');
  9. return dataURL;
  10. },
  11. // base64图片转为blob
  12. getBlobImage(dataurl) {
  13. let arr = dataurl.split(',');
  14. let mime = arr[0].match(/:(.*?);/)[1];
  15. let bstr = atob(arr[1]);
  16. let n = bstr.length;
  17. let u8arr = new Uint8Array(n);
  18. while (n--) {
  19. u8arr[n] = bstr.charCodeAt(n);
  20. }
  21. return new Blob([u8arr], { type: mime });
  22. },
  23. // 复制图片
  24. copyImage(dom, cb) {
  25. let dataurl = this.getBase64Image(dom);
  26. let blob = this.getBlobImage(dataurl);
  27. navigator.clipboard.write([
  28. new window.ClipboardItem({
  29. [blob.type]: blob
  30. })
  31. ]).then(function() {
  32. if (typeof cb === 'function') {
  33. cb();
  34. }
  35. }, function() {
  36. console.log('图片复制失败!');
  37. });
  38. }

以上就是vue怎么实现复制文字和图片的详细内容,更多关于vue怎么实现复制文字和图片的资料请关注九品源码其它相关文章!