Clipboard.js 的使用踩坑不完全记录

前言

由于最近项目需要文本复制功能,浏览一圈决定使用 Clipboard.js,但在使用的过程中遇到不少坑,特此记下以备索引。

基本使用

  1. 引用
    支持引用的方式有多种,如普通页面引用
<script src="dist/clipboard.min.js"></script>

AMD/ES6 Module引用

npm i clipboard

···

const Clipboard = require('clipboard')
// or
import Clipboard from 'clipboard'
  1. 基本使用
<!--引用官方示例-->

<!-- Target -->
<input id="foo" value="Hello World">

<!-- Trigger -->
<button class="btn" data-clipboard-action="copy"  data-clipboard-target="#foo"></button>

在点击 button 后,将自动会复制 target 内容至粘贴板。


对taget 的操作可以是 copy 或 cut,可以通过data-clipboard-action="cut"data-clipboard-action="cut"。当操作类型是cut 时,targetcontenteditadble必须为 true。换句话说,当使用剪切时,目标必须为可读写的 textareaHTML elementcontenteditadbletrue

  1. 事件监听
    可以使用事件监听侦听复制/剪切事件, 然后对复制/剪切的操作结果作处理。使用示例:
// 引用官方文档
var clipboard = new Clipboard('.btn');

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

    e.clearSelection();
});

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

使用事件监听可以对复制/剪切事件的成功与否进行回调。常见的场景是在复制成功后提示用户复制成功,复制失败后提示用户,让其手动复制。

  1. 注意事项 && 坑
    在使用 clipboard.js 复制时,必须有一个由用户手动发起事件,不然调用不成功。但可以采用取巧的办法解决:
  /**
    * 文本复制
    * 
    * @param {string} text - 要复制的文本 
    * @param {object} event - 用户触发的事件 
    */
  const clipboard = (text, event) => {
      const cb = new Clipboard('.t', {
          text: () => text
      })
      cb.on('success', (e) => {
          cb.off('error')
          cb.off('success')
      })
      cb.on('error', (e) => {
          cb.off('error')
          cb.off('success')
      })
      cb.onClick(event)
  }

调用时,如

 const btn = document.querySelector('.btn')
 btn.addEventListener('click', event => {
    clipboard('Hello World from clipboard', event)
 })
 

这样,就可以随时调用而不需要创建 DOM了~

如上,如有疑问,欢迎交流~~ 😆

END

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,713评论 0 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,323评论 19 139
  • 1.这个框架它不依赖于Flash或任何blo肿的框架。 2.安装。 你可以在npm找到它。 npm install...
    空谷悠阅读 7,085评论 0 2
  • 词穷理尽,很是难受。虽然我写的是真的不行,但我还是要挖空心思地去写。厚脸皮我是有了,我也相信没有人会嫌弃...
    开心乐佳阅读 2,087评论 0 0
  • 简书签约作者·米格格 几年前,我跟老板出去应酬,陪一位女客户吃饭。对方是一家民营公司的老板,40岁上下,独身一人。...
    米格格阅读 12,709评论 16 88