在网页上复制文本到剪切板,一般是使用JS+Flash结合的方法,网上有很多相关文章介绍。随着 HTML5 技术的发展,Flash 已经在很多场合不适用了,甚至被屏蔽。本文介绍的一款JS插件,实现了纯JS方法复制文本到剪切板。

插件名是Clipboard.js,该插件不依赖 Flash,而是依赖于最新HTML5推出 Selection APIexecCommand API

execCommand 支持以下浏览器:Chrome浏览器42+,火狐41+,IE9+。Safari目前仍不支持cutcopy指令。

安装

Github:

https://github.com/zenorocha/clipboard.js

可以通过npm方式安装:

npm install clipboard --save

或者bower:

bower install clipboard --save

当然,也可以直接下载ZIP包:https://github.com/zenorocha/clipboard.js/archive/master.zip

开始使用

首先需要在页面引入:

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

示例

<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>clipboard示例</title>
<script src="../dist/clipboard.min.js"></script>
</head>
<body>
<!--data-clipboard-text属性的值将会被复制-->
<div id="btn" class="js-copy" data-clipboard-text="我是被复制的内容啊">
<span>点击复制</span>
</div> <script>
var btn = document.getElementById('btn');
var clipboard = new Clipboard(btn);//实例化 //复制成功执行的回调,可选
clipboard.on('success', function(e) {
console.log(e);
}); //复制失败执行的回调,可选
clipboard.on('error', function(e) {
console.log(e);
});
</script>
</body>
</html>

点击页面的点击复制就可以复制内容到剪切板了,console.log(e)可以打印出里面的内容:

Object {action: "copy", text: "我是被复制的内容啊", trigger: div#btn.js-copy}

用法

从属性里复制内容

Clipboard.js使用起来非常简单,默认会复制data-clipboard-text属性里的值,你可以把需要复制的文本放在里面

上面我们使用document.getElementById获取对象,还可以:

//直接通过ID
var clipboard = new Clipboard('#btn'); //直接通过class
var clipboard = new Clipboard('.js-copy'); //直接通过标签也可以找到
var clipboard = new Clipboard('div');

对于多处需要用到复制功能的:

<div class="js-copy" data-clipboard-text="text1">
<div class="js-copy" data-clipboard-text="text2">
<div class="js-copy" data-clipboard-text="text3">

同样通过class查找:

//直接通过class
var clipboard = new Clipboard('.js-copy');

我们无需去设置点击事件。

从另外一个元素复制内容

示例:

<!-- Target -->
<textarea id="bar">Mussum ipsum cacilds...</textarea> <!-- Trigger -->
<button class="js-copy" data-clipboard-target="#bar">复制到剪切板</button>

上面的data-clipboard-target="#bar"属性定义了复制时将复制id="bar"的内容。

当然,也可以在JS里指定:

var clipboard = new Clipboard('.js-copy',{
target: function() {
return document.querySelector('#bar');
}
});

JS里指定复制的内容

<button class="js-copy" data-clipboard-target="#bar">复制到剪切板</button>

<script>
var clipboard = new Clipboard('.js-copy', {
text: function() {
return '这里被复制的内容';
}
});
</script>

将直接复制text里指定的内容。

剪切功能(cut)

上面默认都实现了剪切功能。还可以指定是复制(copy)还是剪切(cut)。

在html里指定:

<button class="js-copy" data-clipboard-action="copy">复制</button>
<button class="js-copy" data-clipboard-action="cut">剪切</button>

通过data-clipboard-action属性指定。

高级选项

你可以设置回调方法供Clipboard使用:

new Clipboard('.btn', {
target: function(trigger) {
return trigger.nextElementSibling;
}
});

这里的target接受一个回调函数。同样,text也支持接受一个回调函数。

new Clipboard('.btn', {
text: function(trigger) {
return trigger.getAttribute('aria-label');
}
});

清理Clipboard对象:

var clipboard = new Clipboard('.btn');
clipboard.destroy();

浏览器支持

Clipboard.js 基于 SelectionexecCommand APIs . 第二个API仅被下面浏览器支持:

42+ ✔ 41+ ✔ 9+ ✔ 29+ ✔ Nope ✘

Safari目前还不支持execCommand提供的复制/剪切操作,包括移动端。

其它

一般建议全局初始化Clipboard。全部使用相同的class,如.js-clipboard

$(function(){
/*
* 复制到剪切板
* @see https://github.com/zenorocha/clipboard.js
*/
if(typeof Clipboard != 'function'){
return false; /*避免未引入Clipboard抛错*/
} var clipboard = new Clipboard('.js-clipboard');
clipboard.on('success', function(e) {
alert('复制成功');
});
});

推荐阅读

1、clipboard.js中文网 — 纯JS实现复制文本到剪切板,无需Flash,轻量级JavaScript库

http://me.52fhy.com/doc/clipboardjs/

2、clipboard.js — Copy to clipboard without Flash

https://clipboardjs.com/

纯js实现复制到剪贴板功能的更多相关文章

  1. 【转】js实现复制到剪贴板功能,兼容所有浏览器

    两天前听了一个H5的分享,会议上有一句话,非常有感触:不是你不能,而是你对自己的要求太低.很简单的一句话,相信很多事情不是大家做不到,真的是对自己的要求太低,如果对自己要求多一点,那么你取得的进步可能 ...

  2. 【原】js实现复制到剪贴板功能,兼容所有浏览器

    两天前听了一个H5的分享,会议上有一句话,非常有感触:不是你不能,而是你对自己的要求太低.很简单的一句话,相信很多事情不是大家做不到,真的是对自己的要求太低,如果对自己要求多一点,那么你取得的进步可能 ...

  3. 黄聪:JS实现复制到剪贴板功能,兼容所有浏览器(转)

    两天前听了一个H5的分享,会议上有一句话,非常有感触:不是你不能,而是你对自己的要求太低.很简单的一句话,相信很多事情不是大家做不到,真的是对自己的要求太低,如果对自己要求多一点,那么你取得的进步可能 ...

  4. js实现复制到剪贴板功能,兼容所有浏览器

    http://www.cnblogs.com/PeunZhang/p/3324727.html https://github.com/zeroclipboard/ZeroClipboard 复制链接到 ...

  5. JS pc端和移动端共同实现复制到剪贴板功能实现

    JS pc端和移动端实现复制到剪贴板功能实现 在网页上复制文本到剪切板,一般是使用JS+Flash结合的方法,网上有很多相关文章介绍.随着 HTML5 技术的发展,Flash 已经在很多场合不适用了, ...

  6. Zero Clipboard - 跨浏览器兼容的“复制到剪贴板”功能

    开发中经常会用到复制的功能,在 IE 下实现比较简单,但要想做到跨浏览器比较困难了. 本文将介绍一个跨浏览器的库类 Zero Clipboard ,它利用 Flash 进行复制,所以只要浏览器装有 F ...

  7. JQuery实现复制到剪贴板功能

    在网页中实现复制到剪贴板功能,有两种方法, 第1种方法:使用JavaScript自带的方法,但是这种方法只能在IE下使用. document.execCommand("Copy") ...

  8. 【转】js插件zClip实现复制到剪贴板功能

    相信这个功能大家平时上网经常能碰到,以前也没怎么留意怎么实现的,直到项目中需要. 网上一搜一大堆,单纯使用js方法也不是没有,但是由于各浏览器的安全机制不同,不是跨浏览器的.去看了几个常用的网站,都是 ...

  9. js插件zClip实现复制到剪贴板功能

    相信这个功能大家平时上网经常能碰到,以前也没怎么留意怎么实现的,直到项目中需要. 网上一搜一大堆,单纯使用js方法也不是没有,但是由于各浏览器的安全机制不同,不是跨浏览器的.去看了几个常用的网站,都是 ...

随机推荐

  1. C语言的选择和循环上机题目(部分)

    /*(1)某市不同车牌的出租车3公里的起步价和计费分别为:夏利7元/公里,3公里以外2.1元/公里:富康8元/公里,3公里以外2.4元/公里:桑塔纳9元,3公里以外2.7元/公里.编程:从键盘输入乘车 ...

  2. 【转】如何在Windows+VS2005使用最新静态libcurl 7.35.0获取网页数据,支持HTTPS

    地址: http://blog.csdn.net/hujkay作者:Jekkay Hu(34538980@qq.com)关键词:Windows,curl,ssl,  visual c++ 2005, ...

  3. JavaScript的Ajax请求示例

    //创建XMLHttpRequest对象              var request = false;            try {                request = new ...

  4. Spring 学习笔记 2. 尚硅谷_佟刚_Spring_IOC&DI概述

    1,远古时代 这里讲述的IOC的演变历史,举一个例子,假如需要生成HTML和PDF格式的报表,以前的开发方式就是有个报表服务类需要使用报表生成器 它需要和其他三个都关联,它既需要知道接口类型,也需要知 ...

  5. IOS竖屏应用单个页面横屏的解决办法

    昨天朋友问我,怎么实现在竖屏的应用里,显示一个横屏的应用,由于也没做过 就说不知道了,但是我觉得会有这样的API ,因为我手机里就安装有这种类型的软件 今天早上起来,就想做一个Demo出来,惯例的是查 ...

  6. 剑指offer算法_位运算求和

    不用+,-,*,/运算求和,可以分成三步: 1.计算两个数字的异或值,相当于只计算每一位的和,不计算进位,得出结果sum: 2.计算两个数字的与值,相当于求出两个数字的进位,然后左移一位,相当于进位, ...

  7. 改变html中鼠标形状

    要修改的属性是: style=”cursor:default” 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 pointer:是手型. crosshair:是十字 ...

  8. 初步了解yield_python

    yield 关键字是在学习python生成器(Generator)时遇到的,对于它及Generator至今我还不能很深入的理解,当前只是把所理解的知识作下记录,以便以后翻查. yield关键字是用来定 ...

  9. Zookeeper初次使用

    下面介绍Linux系统中Zookeeper的初次使用方法. 1.jdk安装和zookeeper下载 首先从jdk官网中下载jdk文件,然后将文件放在/usr/local/java目录下解压,并打开.b ...

  10. javascript replace正则替换时调用函数替换的使用

    以下函数将替换英文方式下的单引号和双引号,当然change函数编写决定了你要替换什么? String.prototype.repSpecChar=function()      {           ...