使用clipboard.js實(shí)現(xiàn)復(fù)制功能的示例代碼
最近在工作中有一個(gè)需求,就是需要使用一個(gè)按鈕實(shí)現(xiàn)相應(yīng)內(nèi)容的復(fù)制。在網(wǎng)上找了很多解決方案,最后對(duì)比之下選擇了clipboard.js插件來進(jìn)行實(shí)現(xiàn)。因?yàn)樗灰揽縡lash以及其他框架,而且體積小使用簡(jiǎn)單兼容性也好。下面簡(jiǎn)單介紹一下它的用法。
引入插件,可以下載,也可以使用第三方cdn。
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
對(duì)于HTML來說,我們有兩種用法。
第一種
//html部分
<input type="text" id="copyValue" />
<button type="button" data-clipboard-target='#copyValue'>復(fù)制</button>
//js部分
var clipboard = new Clipboard('button');
clipboard.on('success',function(e){
e.clearSelection();
alert('復(fù)制成功');
});
clipboard.on('error',function(e){
e.clearSelection();
alert('復(fù)制失敗');
});
說明:如果我們使用按鈕復(fù)制的是另一個(gè)元素的內(nèi)容,則我們可以使用這種方法。此時(shí)將按鈕稱為觸發(fā)元素,被復(fù)制的元素稱為目標(biāo)元素。此時(shí)data-clipboard-target的值為目標(biāo)元素的選擇器,而data-clipboard-target的屬性被設(shè)置在觸發(fā)元素上。new Clipboard()為實(shí)例化對(duì)象,參數(shù)可以是HTML元素,元素選擇器。有success和error兩個(gè)事件可以供我們監(jiān)聽,實(shí)現(xiàn)自己的邏輯。因?yàn)閺?fù)制完成后,目標(biāo)元素會(huì)處于選中狀態(tài),所以我們需要e.clearSelection()取消目標(biāo)元素的選中狀態(tài)。
優(yōu)點(diǎn):復(fù)制的內(nèi)容可以是動(dòng)態(tài)的,目標(biāo)元素的值發(fā)生變化,復(fù)制的值也發(fā)生變化。
適用場(chǎng)景:復(fù)制內(nèi)容可變,不固定。
第二種
//html部分
<button type="button" data-clipboard-text='復(fù)制內(nèi)容'>復(fù)制</button>
//js部分
new Clipboard('button');
說明:data-clipboard-text的值為你要復(fù)制的內(nèi)容。無目標(biāo)元素,只有觸發(fā)元素。
缺點(diǎn):復(fù)制的內(nèi)容是靜態(tài)的,不變的,提前設(shè)置好的。
適用場(chǎng)景:復(fù)制內(nèi)容固定不變
對(duì)于以上缺點(diǎn),我們可以優(yōu)化如下,使之復(fù)制的內(nèi)容也是動(dòng)態(tài)的。
//html部分
<input type="text" id="copyValue" />
<button type="button" id="copy">復(fù)制</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('復(fù)制成功');
});
clipboard.on('error', function (e) {
alert('復(fù)制失敗');
});
})
接著這里曬出最常用的幾種方式,以供不時(shí)之需。
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('復(fù)制成功!')
});
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>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
js實(shí)現(xiàn)不重復(fù)導(dǎo)入的方法
這篇文章主要介紹了js實(shí)現(xiàn)不重復(fù)導(dǎo)入的方法,實(shí)例分析了JavaScript基于文件與字符串判斷操作實(shí)現(xiàn)JS文件不重復(fù)導(dǎo)入的相關(guān)技巧,需要的朋友可以參考下2016-03-03
JavaScript中字符串相關(guān)的方法使用總結(jié)
這篇文章主要為大家詳細(xì)介紹了JavaScript中字符串相關(guān)的方法使用,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的小伙伴可以學(xué)習(xí)一下2023-08-08
JS 文字符串轉(zhuǎn)換unicode編碼函數(shù)
AJAX傳遞中文字符串時(shí)必須把中文字符串編碼成unicode,一般會(huì)用到JS的自帶函數(shù)escape().不過找到了更好的函數(shù)來確決中文字符轉(zhuǎn)換成unicode編碼的函數(shù)2009-05-05
如何使用TypeScript實(shí)現(xiàn)一個(gè)瀏覽器事件的集中管理
這篇文章主要介紹了使用TypeScript實(shí)現(xiàn)一個(gè)瀏覽器事件的集中管理,瀏覽器事件模型的主要優(yōu)點(diǎn)是它可以使開發(fā)人員更加靈活地處理用戶交互,并且可以通過事件委托等技術(shù)來提高性能,本文給大家講解的非常詳細(xì),需要的朋友可以參考下2023-06-06
JavaScript中連接操作Oracle數(shù)據(jù)庫實(shí)例
這篇文章主要介紹了JavaScript中連接操作Oracle數(shù)據(jù)庫實(shí)例,本文講解了運(yùn)行環(huán)境、代碼實(shí)例、運(yùn)行結(jié)果等一系列完整步驟,需要的朋友可以參考下2015-04-04
JavaScript中的this原理及6種常見使用場(chǎng)景詳解
這篇文章主要介紹了JavaScript中的this原理及6種常見使用場(chǎng)景詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
JS面試必備之如何實(shí)現(xiàn)一個(gè)精確的倒計(jì)時(shí)
又到了金三銀四的季節(jié)了,面試的各位同學(xué)要開始準(zhǔn)備起來了,今天主要分享一個(gè)在面試中經(jīng)常被提到的一個(gè)面試題:倒計(jì)時(shí),希望對(duì)大家有所幫助2024-03-03

