说明
将文本复制到剪贴板不应该很难。它不需要几十个步骤来配置或加载数百个KB。但最重要的是,它不应该依赖于Flash或任何臃肿的框架。 这就是clipboard.js存在的原因。移步官网(https://clipboardjs.com/)
安装
点击此处下载文件即可。
建立
首先,包含位于dist
文件夹中的脚本或从第三方CDN提供商加载它。
1 | <script src="dist/clipboard.min.js"></script> |
现在,您需要通过传递DOM选择器,HTML元素或HTML元素列表来实例化它。
1 | new ClipboardJS('.btn'); |
在内部,我们需要获取与您的选择器匹配的所有元素,并为每个元素添加事件侦听器。但猜猜怎么了?如果您有数百个匹配项,则此操作可能会消耗大量内存。 出于这个原因,我们使用事件代理,它只用一个监听器来代替多个事件监听器。毕竟,#perfmatters。
用法
我们生活在一个_声明式的复兴中_,这就是为什么我们决定利用HTML5数据属性以获得更好的可用性。
从另一个元素复制文本
一个很常见的用例是从另一个元素复制内容。你可以通过data-clipboard-target
在触发器元素中添加一个属性来实现。 您在此属性上包含的值需要与其他元素选择器匹配。
1 | <!-- Target --> |
从另一个元素中剪切文本
另外,您可以定义一个data-clipboard-action
属性来指定您是要copy
还是cut
内容。 如果您省略此属性,copy
则会默认使用。
1 | <!-- Target --> |
正如你所期望的那样,这个cut
动作只适用于<input>
或<textarea>
元素。
从属性复制文本
事实是,你甚至不需要其他元素来复制它的内容。你可以data-clipboard-text
在你的触发器元素中包含一个属性。
1 | <!-- Trigger --> |
活动
有些情况下您想要显示一些用户反馈或捕获复制/剪切操作后选择的内容。 这就是为什么我们会发起自定义事件,比如success
和error
您来倾听并实现您的自定义逻辑。
1 | var clipboard = new ClipboardJS('.btn'); |
对于现场演示,只需打开您的控制台:)
高级用法
如果你不想修改你的HTML,你可以使用一个非常方便的命令API。所有你需要做的是声明一个函数,做你的事情,并返回一个值。 例如,如果你想动态设置一个target
,你需要返回一个节点。
1 | new ClipboardJS('.btn', { |
如果你想动态设置一个text
,你会返回一个String。
1 | new ClipboardJS('.btn', { |
为了在Bootstrap Modals或任何其他改变焦点的库中使用,您需要将聚焦元素设置为container
值。
1 | new ClipboardJS('.btn', { |
另外,如果您正在使用单页面应用程序,则可能需要更精确地管理DOM的生命周期。以下是清理我们创建的事件和对象的方法。
1 | var clipboard = new ClipboardJS('.btn'); |