IDC

告别 Flash 和臃肿框架!这个 3 万 Star 的开源工具帮你提高效率

作者:admin 2021-06-30 我要评论

为什么选择 clipboard.js 将文本复制到剪贴板不应该搞得复杂,它不应该需要几十个步骤来配置或数百 KB 来加载,更不应该依赖于 Flash 或其他臃肿的框架。 clipbo...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

  

为什么选择 clipboard.js

将文本复制到剪贴板不应该搞得复杂,它不应该需要几十个步骤来配置或数百 KB 来加载,更不应该依赖于 Flash 或其他臃肿的框架。

clipboard.js 摆脱了这些限制,就可以实现便捷轻量的操作剪贴板。

安装

npm 安装:

  1. npm install clipboard --save 

或者下载压缩包文件:github.com/zenorocha/cl

配置

如果已经通过 npm 安装,则直接 import:

  1. import ClipboardJS from "clipboard"

如果不使用 npm 管理,需要通过 script 引入或者通过 第三方CDN 加载。

  1. <script src="dist/clipboard.min.js"></script> 

然后通过传入 DOM 选择器 或 HTML 元素 或 HTML 元素数组 创建 Clipboard 实例。

  1. new ClipboardJS('.btn'); 

一般情况下,对于所有符合条件的元素都需要添加监听事件,但如果符合条件的元素较多,这样会消耗大量的内存。 因此,clipboard.js 使用了 事件代理,用一个监听器替代了全部的监听器,这样最大程度的保证了性能。

使用

从其他元素中拷贝内容

如果需要从其他元素中拷贝内容,可以通过在触发元素上添加 data-clipboard-target 属性,属性值为一个选择器,选中被拷贝元素。

  1. <!-- Target --> 
  2. <input id="foo" value="https://github.com/zenorocha/clipboard.js.git"
  3.  
  4. <!-- Trigger --> 
  5. <button class="btn" data-clipboard-target="#foo"
  6.     <img src="assets/clippy.svg" alt="Copy to clipboard"
  7. </button> 

从其他元素中剪贴内容

在触发元素中添加 data-clipboard-action 属性,属性值可以为 copy 或者 cut,设置为 cut 即可剪贴内容,默认为 copy

  1. <!-- Target --> 
  2. <textarea id="bar">Mussum ipsum cacilds...</textarea> 
  3.  
  4. <!-- Trigger --> 
  5. <button class="btn" data-clipboard-action="cut" data-clipboard-target="#bar"
  6.     Cut to clipboard 
  7. </button> 
注意: cut 仅在 <input> 或 <textarea> 元素中生效。

从属性中拷贝内容

如果不需要从其他元素中拷贝内容,那么可以在触发元素上添加 data-clipboard-text 属性,属性值为需要拷贝的内容。

  1. <!-- Trigger --> 
  2. <button class="btn" data-clipboard-text="Just because you can doesn't mean you should — clipboard.js"
  3.     Copy to clipboard 
  4. </button> 

事件处理

如果在拷贝完后需要执行其他自定义操作,可以添加 success 或 error 事件。

  1. var clipboard = new ClipboardJS('.btn'); 
  2.  
  3. clipboard.on('success', function(e) { 
  4.     console.info('Action:', e.action); 
  5.     console.info('Text:', e.text); 
  6.     console.info('Trigger:', e.trigger); 
  7.  
  8.     e.clearSelection(); 
  9. }); 
  10.  
  11. clipboard.on('error', function(e) { 
  12.     console.error('Action:', e.action); 
  13.     console.error('Trigger:', e.trigger); 
  14. }); 

实例展示:进入 官网,打开 console 即可。

Tooltips

由于每个应用都有不同的设计,因此 clipboard.js 不提供任何内置 css 的 tooltip 解决方案。

如果需要实现 tooltip 效果,可以参考官网实现类似效果,网站中使用的是 GitHub's Primer 样式。

高级选项

如果不想修改 HTML 代码,也可以使用 API 实现上述效果,只需要在实例中声明函数,返回所需值。

例如,如果需要动态设置 target,可以返回一个 Node 节点。

  1. new ClipboardJS('.btn', { 
  2.     text: function(trigger) { 
  3.         return trigger.getAttribute('aria-label'); 
  4.     } 
  5. }); 

如果需要动态设置 text,可以返回一个 String 。

  1. new ClipboardJS('.btn', { 
  2.     text: function(trigger) { 
  3.         return trigger.getAttribute('aria-label'); 
  4.     } 
  5. }); 

如果在 Bootstrap 模态框(Modals)中使用,或是在其他修改焦点的类库中使用,可以将获得焦点的元素设置为 container属性的值。

  1. new ClipboardJS('.btn', { 
  2.     container: document.getElementById('modal'
  3. }); 

同样地,单页面应用中,如果需要更加精确地管理 DOM 的生命周期,可以清理事件以及创建的对象。

  1. var clipboard = new ClipboardJS('.btn'); 
  2. clipboard.destroy(); 

Vue3 中尝试使用 clipboard.js

新建一个 Vue3 项目,安装 clipboard.js

  1. // 新建 vue 项目 
  2. vue create clipboard 
  3.  
  4. // 安装 
  5. yarn add clipboard 

简单使用剪贴功能

修改 App.vue,引入ClipboardJS,删除其他元素,新增测试用元素

  1. <!-- App.vue --> 
  2. <template> 
  3.   <div class="wrapper"
  4.     <input id="foo" value="https://github.com/zenorocha/clipboard.js.git" /> 
  5.  
  6.     <button 
  7.       class="btn" 
  8.       data-clipboard-target="#foo" 
  9.       data-clipboard-action="cut" 
  10.     > 
  11.       Copy to clipboard 
  12.     </button> 
  13.   </div> 
  14. </template> 

在 Vue3 setup 函数中初始化 clipboard 实例

  1. // 引入 
  2. import ClipboardJS from "clipboard"
  3.  
  4. // setup 函数中实例化 
  5. setup() { 
  6.   new ClipboardJS(".btn"); 
  7. }, 

可以看到点击按钮剪贴成功!

添加 success 函数

当剪贴成功后,弹出剪贴成功信息,对上述示例稍作修改,input 中的内容采用双向绑定:

  1. <template> 
  2.   <div class="wrapper"
  3.     <input id="foo" :value="content" /> 
  4.  
  5.     <button 
  6.       class="btn" 
  7.       data-clipboard-target="#foo" 
  8.       data-clipboard-action="cut" 
  9.     > 
  10.       Copy to clipboard 
  11.     </button> 
  12.   </div> 
  13. </template> 
  14.  
  15. // setup 函数 
  16.   setup() { 
  17.     const clipboard = new ClipboardJS(".btn"); 
  18.     const content = ref("clipboard 测试内容"); 
  19.     clipboard.on("success", (e) => { 
  20.       alert(`剪贴成功: ${e.text}`); 
  21.       console.info("Action:", e.action); 
  22.       console.info("Text:", e.text); 
  23.       console.info("Trigger:", e.trigger); 
  24.       e.clearSelection(); 
  25.     }); 
  26.     return { content }; 
  27.   } 

弹出框如下:

打印如下:


浏览器支持 


本文转载自网络,原文链接:https://zhuanlan.zhihu.com/p/346216263?utm_source=tuicool&utm_medium=referral

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 告别 Flash 和臃肿框架!这个 3 万 Sta

    告别 Flash 和臃肿框架!这个 3 万 Sta

  • 利用 Python 爬取网站的新手指南

    利用 Python 爬取网站的新手指南

  • 从观察者模式到响应式的设计原理

    从观察者模式到响应式的设计原理

  • 中国信通院泰尔系统实验室实现多频段复

    中国信通院泰尔系统实验室实现多频段复

腾讯云代理商
海外云服务器