前端实现复制


前端实现复制功能

我们可以实现一个复制小功能
在这里插入图片描述


一、使用document.execCommand方法

Document.execCommand()是操作剪贴板的传统方法,各种浏览器都支持。
tip:查资料 该方法已废弃 可以用 但是长期使用还是多有不便
在这里插入图片描述

操作方法:

const inputElement = document.querySelector('#input');
inputElement.select();
document.execCommand('copy');

先选中 inputElement 元素里面的值 然后再复制

注意,复制操作最好放在事件监听函数里面,由用户触发(比如用户点击按钮)。
如果脚本自主执行,某些浏览器可能会报错。

特殊操作:

如果我们需要复制自己放进去的值就可能就不是很方便了
但是也有方法 创建一个元素 再销毁 对性能可能有一定影响

 copy(text) {
      var textarea = document.createElement("textarea");
      textarea.value = text;
      document.body.appendChild(textarea);
      textarea.select();
      document.execCommand("copy");
      document.body.removeChild(textarea);
      this.$message({
        type: "success",
        message: "复制成功",
      });
    },

弊端

该方法的一些弊端:

  1. 它是同步操作,如果复制/粘贴大量数据,页面会出现卡顿。
  2. 有些浏览器还会跳出提示框,要求用户许可,这时在用户做出选择前,页面会失去响应。
  3. 复制时想保留换行不能用input只能用textarea
  4. 复制时想保留value里的换行,使用\r成功,\r\n,br不行

二、navigator.clipboard方法

如果navigator.clipboard属性返回undefined,就说明当前浏览器不支持这个 API。

1. writeText()

可以写入剪切板

async function copyPageUrl() {
        try {
            await navigator.clipboard.writeText(123);
            console.log('Page text copied to clipboard');
            alert("复制成功啦");
        } catch (err) {
            console.error('Failed to copy: ', err);
        }
    }

2.想写入图片的话要使用write()

代码如下(示例):

const clipboard = navigator.clipboard;

if (!clipboard) {
  console.log("不支持");
  //如果clipboard 是undefined那么就说明该浏览器不支持
}

const button = document.querySelector("button");

button.addEventListener("click", async () => {
  try {
    const imgblob = await (
      await fetch("https://dummyimage.com/100.png")
    ).blob();
    await clipboard.write([
      new ClipboardItem({
        "image/png": imgblob,
      }),
    ]);
    console.log("success");
  } catch (error) {
    console.log("failed", error);
  }
});

3.注意点

1.该功能仅在支持浏览器的安全上下文(HTTPS)中可用,开发环境(localhost)除外
2.它们都是异步方法,返回 Promise 对象。

三、cliboard.js

如果上两种都没有办法满足要求时,可以使用该库
cliboard.js 是一个轻量级的 clipboard 库,用于简化在网页中执行剪贴板操作的过程。

总结

以上三种方法都能实现前端复制功能 可能需要注意浏览器兼容性问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值