clipboard是一款现代化的拷贝文字的插件。
一、在一般的使用:
1、引入js文件
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script>
2、使用
//1、
new ClipboardJS('.btn');
//2、
//data-clipboard-target 属性:可实现从另一个元素复制内容,能匹配到另一个元素的选择器
<!-- Target -->
<input id="foo" value="https://github.com/zenorocha/clipboard.js.git">
<!-- Trigger -->
<button class="btn" data-clipboard-target="#foo">
<img src="assets/clippy.svg" alt="Copy to clipboard">
</button>
//data-clipboard-action属性:从另一个元素剪切文本,若省略这个属性,则默认为复制
//cut(剪切)操作只能在<input> 或者 <textarea> 元素上生效
<!-- Target -->
<textarea id="bar">Mussum ipsum cacilds...</textarea>
<!-- Trigger -->
<button class="btn" data-clipboard-action="cut" data-clipboard-target="#bar">
Cut to clipboard
</button>
//从属性复制文本
//data-clipboard-text属性
<button class="btn" data-clipboard-text="Just because you can doesn't mean you should — clipboard.js">
Copy to clipboard
</button>
3、事件
var clipboard = new ClipboardJS('.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);
});
4、高级用法
//1、动态设置target,返回一个node节点
new ClipboardJS('.btn', {
target: function(trigger) {
return trigger.nextElementSibling;
}
});
//2、动态设置text,返回字符串
new ClipboardJS('.btn', {
text: function(trigger) {
return trigger.getAttribute('aria-label');
}
});
//3、获得焦点的元素设置为 container属性的值
new ClipboardJS('.btn', {
container: document.getElementById('modal')
});
//4、销毁对象
clipboard.destroy();
二、在vue中使用。在vue中使用,不会直接使用clipboard.js,而是使用针对于vue项目的clipboard.js插件——vue-clipboard2。
①安装
1、在纯vue项目中使用
npm install --save vue-clipboard2
2、一般的html中引入vue.js文件的页面中使用
<script src="vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script>
②在纯vue项目中使用时需要在main.js中引入
import Vue from 'vue'
import VueClipboard from 'vue-clipboard2'
Vue.use(VueClipboard)
③使用
<div id="app"></div>
<template id="t">
<div class="container">
<input type="text" v-model="message">
<button type="button"
v-clipboard:copy="message"
v-clipboard:success="onCopy"
v-clipboard:error="onError">Copy!</button>
<button type="button" @click="doCopy">Copy!</button>
</div>
</template>
<script>
new Vue({
el: '#app',
template: '#t',
data: function () {
return {
message: 'Copy These Text'
}
},
methods: {
onCopy: function (e) {
alert('You just copied: ' + e.text)
},
onError: function (e) {
alert('Failed to copy texts')
},
doCopy: function () {
this.$copyText(this.message).then(function (e) {
alert('Copied')
console.log(e)
}, function (e) {
alert('Can not copy')
console.log(e)
})
}
}
})
</script>
clipboardjs官网地址链接:http://www.clipboardjs.cn/
vue-clipboard2地址链接:https://www.npmjs.com/package/vue-clipboard2
gitlab地址链接:https://github.com/grmlin/clipboardjs