开发过程当中遇到的需求须要复制 请求过来的一段密令(相似支付宝淘宝口令)到剪切板。javascript
若是是在pc端的话,能够直接使用原生js进行编写,代码以下:css
<textarea id="input">这是被复制的内容</textarea> <button onclick="copyText()">copy</button> <script type="text/javascript"> function copyText() { var text = document.getElementById("text").innerText; var input = document.getElementById("input"); input.value = text; // 修改文本框的内容 input.select(); // 选中文本 document.execCommand("copy"); // 执行浏览器复制命令 alert("复制成功"); } </script>
可是这种方法在移动端会有一些问题,我是在微信公众号开发,发如今微信浏览器中会失效。html
网上搜了下,clipboard.js
是个相对比较靠谱的第三方。vue
官方githubjava
目前的star 25k ⭐️ios
大佬的中文翻译git
两种方式,一种适合复制固定的文本,另外一种适合复制从后端获取的数据文本;github
经过npm安装npm
npm install clipboard --save
经过script+连接导入,能够去BootCDN复制个本身想要的axios
<script src="https://cdn.bootcss.com/clipboard.js/2.0.4/clipboard.js"></script>
若是是vue文件,只须要在相关的组件中进行clipboard.js导入即刻。
import Clipboard from "clipboard";
编写须要进行复制的相关代码
若是是复制固定文本则以下:
<button class="copy-btn" @click="getAnswerNiceName" ref="copy" data-clipboard-text="这是固定的须要被复制到剪切板的内容" >复制口令</button>
若是是复制从服务器获取的数据则以下:
<input id="copy-input" readonly //若是在移动端,必定要再input中加上`readonly`属性,不然会拉起手机输入框 /> //这个input能够进行相应的隐藏,例如绝对定位等 <button class="copy-btn" @click="handleCopy" ref="copy" data-clipboard-action="copy" data-clipboard-target="#copy-input" >复制口令</button> .... methods: { handleCopy(){ axios.post('请求连接').then(res=>{ var input = document.getElementById("copy-input"); input.value = res.data //将获取的数据复制给input setTimeout(() => { const copybtn = this.$refs.copy; this.clipboard = new Clipboard(copybtn); }, 100); //利用延时器防止内容没有及时更新等致使报错 }) } }
延时器代码部分,也可使用vue提供的 nextTick 方法。 //感谢 Grewer 大佬的评论意见
使用该方法,会在下次 DOM 更新循环结束以后执行延迟回调。在修改数据以后当即使用这个方法,获取更新后的 DOM。代码以下:
this.$nextTick(() => { const copybtn = this.$refs.copy; this.clipboard = new Clipboard(copybtn); });
也能够作一些复制成功与否的判断:
clipboard.on('success', function(e) { console.info('Action:', e.action); console.info('Text:', e.text); console.info('Trigger:', e.trigger); alert('复制成功,您复制的连接为'+e.text); e.clearSelection(); }); clipboard.on('error', function(e) { console.error('Action:', e.action); console.error('Trigger:', e.trigger); alert('复制失败') });
这位大佬的demo代码也能够进行参考,亲测有用 -> 使用clipboard.js实现js复制黏贴的功能
网上说这个插件可能存在一些兼容性问题,我本身测试了多个手机,包括安卓和ios,暂时还未发现有兼容问题的存在,若是遇到了我再来及时更新
感谢各位大佬的参阅,若是有什么问题均可以在评论区提出。
若是以为对您有帮助的话,也可点个赞,点个收藏,点关注不迷路。