网页实现把文本复制到粘贴板
思路整理
有一个按钮可以触发以下逻辑:
- 将生成的文本自动复制到剪切板上 结果要有友好提示
- 复制成功后可以粘贴到任何地方
一开始我以为有通用的接口,一番调研之后发现有以下几种东东:
document.execCommand("copy")
这个用于在要复制的文本处于被选中状态时使用window.clipboardData.setData("Text", clipBoardContent)
为挂载在window上的API 据说兼容性不好- 结合
ZeroClipboard.js
这个插件实现兼容性比较好的复制粘贴,通过new ZeroClipboard.client()
来调用各个方法 github
上的库clipboard.js
,通过new Clipboard('.btn')
这种语法实现访问剪切板的操作,兼容性最好
有一些具体的代码示例参考CSDN中的内容,不过要考虑是否过时
由于是在vue框架基础上进行开发,最后选择了上面提到的第四种方法,完全抛弃了flash的hack实现(第三种),并且有着强大的兼容性,github
上的star数量已经说明了一切,本来考虑是自己封装个指令来用,后来发现vue-clipboard2
这个插件已经实现了封装,按照绝不重复造轮子的原则,直接在项目里用了起来。
原理剖析
clipboard.js
的核心原理是虚拟了一个不可见的选区并利用复制的API来实现文本复制,因此最起码需要动态创造的页面元素有可以有被选中的属性。
为了方便学习vue自定义指令的写法,现在把vue-clipboard2的代码摘抄过来加以学习:
|
|
插件使用
如果对vue-directive
比较熟悉的话,这些看懂都比较容易,核心就是new Clipboard()
的调用,看完之后在vue中的用法自然很容易。定义的指令名为v-clipboard
。并且可以传入v-clipboard:cut
/v-clipboard:copy
/v-clipboard:success
/v-clipboard:error
等参数及回调函数。
|
|
|
|
在element-ui
基础上开发而成,所以成功和失败的回调都直接用了element
的API
。相信还是比较容易看懂的哈~