使用clipboard.js实现复制功能的示例代码


Posted in Javascript onOctober 16, 2017

最近在工作中有一个需求,就是需要使用一个按钮实现相应内容的复制。在网上找了很多解决方案,最后对比之下选择了clipboard.js插件来进行实现。因为它不依靠flash以及其他框架,而且体积小使用简单兼容性也好。下面简单介绍一下它的用法。

引入插件,可以下载,也可以使用第三方cdn。

<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>

对于HTML来说,我们有两种用法。

第一种

//html部分
<input type="text" id="copyValue" />
<button type="button" data-clipboard-target='#copyValue'>复制</button>
//js部分
var clipboard = new Clipboard('button');
clipboard.on('success',function(e){
 e.clearSelection();
 alert('复制成功');
 });
clipboard.on('error',function(e){
 e.clearSelection();
 alert('复制失败');
 });

说明:如果我们使用按钮复制的是另一个元素的内容,则我们可以使用这种方法。此时将按钮称为触发元素,被复制的元素称为目标元素。此时data-clipboard-target的值为目标元素的选择器,而data-clipboard-target的属性被设置在触发元素上。new Clipboard()为实例化对象,参数可以是HTML元素,元素选择器。有success和error两个事件可以供我们监听,实现自己的逻辑。因为复制完成后,目标元素会处于选中状态,所以我们需要e.clearSelection()取消目标元素的选中状态。
优点:复制的内容可以是动态的,目标元素的值发生变化,复制的值也发生变化。

适用场景:复制内容可变,不固定。

第二种

//html部分
<button type="button" data-clipboard-text='复制内容'>复制</button>
//js部分
new Clipboard('button');

说明:data-clipboard-text的值为你要复制的内容。无目标元素,只有触发元素。

缺点:复制的内容是静态的,不变的,提前设置好的。

适用场景:复制内容固定不变

对于以上缺点,我们可以优化如下,使之复制的内容也是动态的。

//html部分
 <input type="text" id="copyValue" />
 <button type="button" id="copy">复制</button>
//js
$('#copy').on('click', function () {
 var value = $('#copyValue').val();
 $('#copy').attr('data-clipboard-text', value);
 var clipboard = new Clipboard('#copy');
 clipboard.on('success', function (e) {
 alert('复制成功');
 });
 clipboard.on('error', function (e) {
 alert('复制失败');
 });
})

接着这里晒出最常用的几种方式,以供不时之需。

function-target

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>function-target</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
  <!-- 1. Define some markup -->
  <button class="btn">Copy</button>
  <div>hello</div>

  <!-- 2. Include library -->
  <script src="../dist/clipboard.min.js"></script>

  <!-- 3. Instantiate clipboard -->
  <script>
  var clipboard = new ClipboardJS('.btn', {
    target: function() {
      return document.querySelector('div');
    }
  });

  clipboard.on('success', function(e) {
    //console.log(e);
    alert('复制成功!')
  });

  clipboard.on('error', function(e) {
    console.log(e);
  });
  </script>
</body>
</html>

function-text

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>function-text</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
  <!-- 1. Define some markup -->
  <button class="btn">Copy</button>

  <!-- 2. Include library -->
  <script src="../dist/clipboard.min.js"></script>

  <!-- 3. Instantiate clipboard -->
  <script>
  var clipboard = new ClipboardJS('.btn', {
    text: function() {
      return 'to be or not to be';
    }
  });

  clipboard.on('success', function(e) {
    console.log(e);
  });

  clipboard.on('error', function(e) {
    console.log(e);
  });
  </script>
</body>
</html>

target-div

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>target-div</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
  <!-- 1. Define some markup -->
  <span class="copy_content">hello 123</span>
  <button class="btn" data-clipboard-action="copy" data-clipboard-target=".copy_content">Copy</button>

  <!-- 2. Include library -->
  <script src="../dist/clipboard.min.js"></script>

  <!-- 3. Instantiate clipboard -->
  <script>
  var clipboard = new ClipboardJS('.btn');

  clipboard.on('success', function(e) {
    console.log(e);
  });

  clipboard.on('error', function(e) {
    console.log(e);
  });
  </script>
</body>
</html>

target-input

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>target-input</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
  <!-- 1. Define some markup -->
  <input id="foo" type="text" value="hello">
  <button class="btn" data-clipboard-action="copy" data-clipboard-target="#foo">Copy</button>

  <!-- 2. Include library -->
  <script src="../dist/clipboard.min.js"></script>

  <!-- 3. Instantiate clipboard -->
  <script>
  var clipboard = new ClipboardJS('.btn');

  clipboard.on('success', function(e) {
    console.log(e);
  });

  clipboard.on('error', function(e) {
    console.log(e);
  });
  </script>
</body>
</html>

target-textarea

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>target-textarea</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
  <!-- 1. Define some markup -->
  <textarea id="bar">hello</textarea>
  <button class="btn" data-clipboard-action="cut" data-clipboard-target="#bar">Cut</button>

  <!-- 2. Include library -->
  <script src="../dist/clipboard.min.js"></script>

  <!-- 3. Instantiate clipboard -->
  <script>
  var clipboard = new ClipboardJS('.btn');

  clipboard.on('success', function(e) {
    console.log(e);
  });

  clipboard.on('error', function(e) {
    console.log(e);
  });
  </script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
解放web程序员的输入验证
Oct 06 Javascript
复制小说文本时出现的随机乱码的去除方法
Sep 07 Javascript
jquery validate poshytip 自定义样式
Nov 26 Javascript
多个$(document).ready()的执行顺序实例分析
Jul 26 Javascript
jQuery中animate()方法用法实例
Dec 24 Javascript
一张Web前端的思维导图分享
Jul 03 Javascript
JavaScript函数的调用以及参数传递
Oct 21 Javascript
vue项目中实现图片预览的公用组件功能
Oct 26 Javascript
js中的数组对象排序分析
Dec 11 Javascript
vue中使用GraphQL的实例代码
Nov 04 Javascript
基于ts的动态接口数据配置的详解
Dec 18 Javascript
vue3.0生命周期的示例代码
Sep 24 Javascript
requireJS模块化实现返回顶部功能的方法详解
Oct 16 #Javascript
JavaScript简单实现合并两个Json对象的方法示例
Oct 16 #Javascript
seajs实现强制刷新本地缓存的方法分析
Oct 16 #Javascript
基于ajax和jsonp的原生封装(实例)
Oct 16 #Javascript
AngularJS实现注册表单验证功能
Oct 16 #Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
Oct 16 #Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
Oct 16 #Javascript
You might like
php中autoload的用法总结
2013/11/08 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
jquery 新建的元素事件绑定问题解决方案
2014/06/12 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
js仿iphone秒表功能 计算平均数
2017/01/11 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
Angular实现的table表格排序功能完整示例
2017/12/22 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
python 全文检索引擎详解
2017/04/25 Python
python爬虫的数据库连接问题【推荐】
2018/06/25 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
Python应用自动化部署工具Fabric原理及使用解析
2020/11/30 Python
python实现学生信息管理系统源码
2021/02/22 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
某公司的.net工程师面试题笔试题
2013/11/22 面试题
某公司C#程序员面试题笔试题
2014/05/26 面试题
业务助理岗位职责
2013/11/18 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
C++程序员求职信范文
2014/04/14 职场文书
社区党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
诚信承诺书
2015/01/19 职场文书
倡议书范文大全
2015/04/28 职场文书
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
2021/05/26 Python
纯html+css实现奥运五环的示例代码
2021/08/02 HTML / CSS
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang