vue中实现点击一键复制功能,且不影响其他页面的复制粘贴功能

需求说明

  1. 列表详情超出一定字符长度,省略号显示
  2. 悬浮展示全部且能复制

问题及解决办法

  1. 起初开发使用过滤器截取字符串展示省略号,使用元素自带的title属性展示全部
  2. 要求能够复制,title无法实现,则使用复制功能
  3. 在需要复制功能的后面增加icon图,点击复制
    在这里插入图片描述
<span>
     <span :title="addDetailInfo.remark">{{ addDetailInfo.remark| ellipsis }}</span>
     <i class="el-icon-document-copy" style="cursor: pointer; color: #16aefa; margin-left: 5px;@click="copySystemInfo(addDetailInfo.remark)"></i>
</span>
copySystemInfo(val) {
	   const save = function (e) {
	       console.log(e)
	       e.clipboardData.setData('text/plain', val)
	       e.preventDefault()
	   }
	   document.addEventListener('copy', save);
	   document.execCommand('copy');
	   this.$message.success('复制成功')
},

到此复制功能已实现,后续发现使用该方法复制完成后,再使用浏览器自带的复制功能没有生效,剪贴板一直都是使用该方法复制的内容。

解决使用复制方法复制后,浏览器自带的复制功能不生效

原因: 复制方法中的参数为完整数据,只在特定的地方进行了方法(copySystemInfo)调用及传参。但只要鼠标右击复制或使用快捷键进行复制,都会触发监听的‘copy’事(addEventListener(‘copy’),此时并没有进行传值,所以剪贴板一直都是上一次复制的内容。

解决思路: 区分复制是点击icon图触发还是快捷键触发的

打印e.target可发现里面有当前元素的类名,所以可根据类名进行判断,可自定义类名,避免类名重复无法达到区分的目的

f(e.target.className == "el-icon-document-copy") {
	  e.clipboardData.setData('text/plain', val)
	  e.preventDefault()
}
copySystemInfo(val) {
      const save = function (e) {
        console.log(e)
        if(e.target.className == "el-icon-document-copy") {
          e.clipboardData.setData('text/plain', val)
          e.preventDefault()
        }
      }
      document.addEventListener('copy', save);
      document.execCommand('copy');
      this.$message.success('复制成功')
},
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值