在vue使用clipboard.js进行一键复制文本的实现示例


Posted in Javascript onJanuary 15, 2019

需求

最近在做商城项目,有个需求是需要点击复制订单号的,然后就觉得可以使用原生的复制方法和使用第三方库。

浏览器原生方法

这种方式兼容性不是太好,还要看浏览器是否支持,容易采坑。

//在IE中可以用window.clipboardData.setData('text','内容')实现。
//在IE中clipboardData是window的属性,而其他浏览器则是相应的event对象的属性,这实际上是一种安全措施,防止未经授权的访问,为了兼容其他浏览器,所以我们不能通过clipboardData来实现这种操作。
//具体做法:
//1.创建一个隐藏的input框
//2.点击的时候,将要复制的内容放进input框中
//3.选择文本内容input.select()
//4.这里只能用input或者textarea才能选择文本。
//5.执行浏览器的复制命令document.execCommand("copy")。
 function copyText() {
  var text = document.getElementById("text").innerText; // 获取要复制的内容也可以传进来
  var input = document.getElementById("input"); // 获取隐藏input的dom
  input.value = text; // 修改文本框的内容
  input.select(); // 选中文本
  document.execCommand("copy"); // 执行浏览器复制命令
  alert("复制成功");
 }

//在事件中可以通过e 对内容进行修饰
document.body.oncopy = e => {
  // 监听全局复制 做点什么
}
 // 还有这种写法:
document.addEventListener("copy", e => {
 // 监听全局复制 做点什么
});

使用 clipboard.js

我们要先安装

npm install clipboard --save

在 mian.js 中引入,当然我们也可以在用到的 .vue 中引入,因为我不止一个地方用到了复制,所以直接在 main.js 里面引入了。

import clipboard from 'clipboard';
//注册到vue原型上
Vue.prototype.clipboard = clipboard;

在需要的地方使用

//dom
···
<div class="sn Lfll Lmr20">订单编号:
  <span data-clipboard-action="copy" class="cobyOrderSn" :data-clipboard-text="orderData.orderSn" @click="copyLink">{{orderData.orderSn}}</span>
 </div>
···
//js
···
 copyLink() {
   let _this = this;
   let clipboard = new this.clipboard(".cobyOrderSn");
   clipboard.on('success', function () {
    _this.$toast("复制成功")
   });
   clipboard.on('error', function () {
    _this.$toast("复制失败")
   });
 }
···

当然 clipboard.js 的功能可不止这么简单,我们还可使用它进行剪切,还可以通过它复制其他元素的值等,具体的使用可查看官方文档: clipboard.js ;

小结

关于浏览器一键复制,推荐使用 clipboard.js 来做,因为现在原生方法兼容性并不是很好,而且 clipboard.js 文件并不大,但是却可以帮我们做很多事情,减轻很多调试和避免采坑。以上只是记录一下自己遇到的问题,如有错误,还请指正,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
Dec 04 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
Mar 25 Javascript
js以对象为索引的关联数组
Jul 04 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
Jul 31 Javascript
javascript利用apply和arguments复用方法
Nov 25 Javascript
Javascript简单实现面向对象编程继承实例代码
Nov 27 Javascript
jQuery给指定的table动态添加删除行的操作方法
Oct 12 Javascript
JS运动特效之任意值添加运动的方法分析
Jan 24 Javascript
零基础之Node.js搭建API服务器的详解
Mar 08 Javascript
jQuery 动画与停止动画效果实例详解
May 19 jQuery
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
May 29 jQuery
Vue.extend 登录注册模态框的实现
Dec 29 Vue.js
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
Jan 15 #Javascript
mock.js实现模拟生成假数据功能示例
Jan 15 #Javascript
详解webpack引入第三方库的方式以及注意事项
Jan 15 #Javascript
JS高阶函数原理与用法实例分析
Jan 15 #Javascript
JS立即执行函数功能与用法分析
Jan 15 #Javascript
vue-cli 目录结构详细讲解总结
Jan 15 #Javascript
webpack file-loader和url-loader的区别
Jan 15 #Javascript
You might like
PHP生成UTF8文件的方法
2010/05/15 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
php将金额数字转化为中文大写
2015/07/09 PHP
部署PHP时的4个配置修改说明
2015/10/19 PHP
PHP实现简单的计算器
2020/08/28 PHP
ArrayList类(增强版)
2007/04/04 Javascript
IE 下的只读 innerHTML
2009/08/21 Javascript
通过JS 获取Mouse Position(鼠标坐标)的代码
2009/09/21 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
js Date概念详细介绍
2013/11/22 Javascript
Jquery 动态生成表格示例代码
2013/12/24 Javascript
jQuery 获取兄弟元素的几种不错方法
2014/05/23 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
Python 从列表中取值和取索引的方法
2018/12/25 Python
python递归法实现简易连连看小游戏
2020/03/25 Python
python标记语句块使用方法总结
2019/08/05 Python
Pandas时间序列:时期(period)及其算术运算详解
2020/02/25 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
Chupi官网:在爱尔兰手工制作的订婚、结婚戒指和精美珠宝
2020/09/28 全球购物
怎样自定义一个异常类
2016/09/27 面试题
师范生自我鉴定范文
2013/10/05 职场文书
九年级化学教学反思
2014/01/28 职场文书
哈弗商学院毕业生求职信
2014/02/26 职场文书
培训班开班仪式主持词
2014/03/28 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
学期个人工作总结
2015/02/13 职场文书
2015年销售助理工作总结
2015/05/11 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书
对Keras自带Loss Function的深入研究
2021/05/25 Python