0
点赞
收藏
分享

微信扫一扫

Clipboard -- 剪贴板操作

四种实现剪贴板的操作

  • 原生​​document.execCommand()​​ 方法
  • 异步的 Clipboard API
  • ​copy​​​ 事件和​​paste​​ 事件
  • 第三方库​​clipboard.js​​

前三个的详细内容可以查阅阮一峰老师的​​剪贴板操作 Clipboard API 教程​​。我们来看看第四种使用 clipboard.js 库简化原生操作。

第三方库 Clipboard.js

首先,在我们的项目中使用 NPM 引入 clipboard:

$ npm i clipboard

或者使用 CDN:

<script src="https://cdn.jsdelivr.net/npm/clipboard@2.0.10/dist/clipboard.min.js"></script>

​​Clipboard.js​​ 的文档已经很全面了,以下是一些简单的实例。

复制文本

通过 ​​data-clipboard-target​​ 绑定相对应的 id 进行匹配:

<!-- Target -->
<input id="foo" value="https://github.com/zenorocha/clipboard.js.git">

<!-- Trigger -->
<button class="btn" data-clipboard-target="#foo">
<img src="assets/clippy.svg" alt="Copy to clipboard">
</button>

更简便的方法是,使用 ​​data-clipboard-text​​ 属性设置您想包含的内容即可。

<button class="btn" data-clipboard-text="Copy to Clipboard"></button>

剪切文本

定义 ​​data-clipboard-action​​​ 属性,以指定是要 ​​copy​​​ 还是 ​​cut​​ 内容。

<button class="btn" data-clipboard-action="cut" data-clipboard-target="#foo">
Cut to clipboard
</button>

注意:​cut​​​ 操作仅适用于 ​​<input>​​​ 或 ​​<textarea>​​ 元素。

事件

​success​​​ 和 ​​error​​ 让您监听和实现您的自定义逻辑。

const clipboard = new ClipboardJS('.btn')

clipboard.on('success', e => {
console.info('Action:', e.action)
console.info('Text:', e.text)
console.info('Trigger:', e.trigger)

e.clearSelection()
})

clipboard.on('error', e => {
console.error('Action:', e.action)
console.error('Trigger:', e.trigger)
})

还有一些​​高级选项​​,详细见文档。

示例:添加著作权

我们在很多知识分享平台都可以看到,当我们复制一段超过一定字数的内容时,会在您复制的内容最后追加上一段标注:

作者:xxx
链接:xxx
来源:xxx
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。`

我们使用 ​​copy​​ 事件来实现(这里不对复制多少字数做判断):

document.addEventListener('copy', e => {
const selection = document.getSelection()
const ct = `作者:lio
链接:https://www.jianshu.com
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。`
e.clipboardData.setData('text/plain', selection.toString() + '\n' + ct)
e.preventDefault()
})

复制这段代码到控制台,试着随意复制一段文本到其他地方。

尝试着,使用其他以上所讲述的任何方法,来修改这个示例,以加深印象。

举报

相关推荐

0 条评论