参考:https://github.com/cpm828/clipboard.js
CDN:http://cdn.bootcss.com/clipboard.js/1.5.12/clipboard.min.js
| 1 | data-clipboard-action: 操作行为,默认为copy,剪切为cut | 
常用方法:
- 复制 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17- <p class="para">123456789</p> 
 <button class="btn1" data-clipboard-target=".para">复制</button>
 <script>
 var clipboard1 = new Clipboard('.btn1');
 clipboard1.on('success', function(e) {
 console.info('Action:', e.action); // 操作名称
 console.info('Text:', e.text); // 操作的文本
 console.info('Trigger:', e.trigger); // dom节点
 e.clearSelection(); // 取消选中
 });
 clipboard1.on('error', function(e) {
 console.error('Action:', e.action);
 console.error('Trigger:', e.trigger);
 });
 </script>
- 剪切 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17- <input type="text" class="input" value="我就是那个input"> 
 <button class="btn2" data-clipboard-action="cut" data-clipboard-target=".input">剪切</button>
 <script>
 var clipboard2 = new Clipboard('.btn2');
 clipboard2.on('success', function(e) {
 console.info('Action:', e.action); // 操作名称
 console.info('Text:', e.text); // 操作的文本
 console.info('Trigger:', e.trigger); // dom节点
 e.clearSelection(); // 取消选中
 });
 clipboard2.on('error', function(e) {
 console.error('Action:', e.action);
 console.error('Trigger:', e.trigger);
 });
 </script>
- 复制固定文本 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15- <button class="btn3" data-clipboard-text="我就是那个隐藏的文字">复制固定数据</button> 
 <script>
 var clipboard3 = new Clipboard('.btn3');
 clipboard3.on('success', function(e) {
 console.info('Action:', e.action); // 操作名称
 console.info('Text:', e.text); // 操作的文本
 console.info('Trigger:', e.trigger); // dom节点
 e.clearSelection(); // 取消选中
 });
 clipboard3.on('error', function(e) {
 console.error('Action:', e.action);
 console.error('Trigger:', e.trigger);
 });
 </script>
- 动态将目标指向下一个节点 - 1 
 2
 3
 4
 5
 6
 7
 8
 9- <button class="btn4">看我如下操作下一个节点</button> 
 <script>
 new Clipboard('.btn4', {
 target: function(trigger) {
 return trigger.nextElementSibling; // 动态指向下一个节点,及操作下一个节点
 }
 });
 </script>
- 动态操作属性值 - 1 
 2
 3
 4
 5
 6
 7
 8
 9- <button class="btn5" aria-label="我用了自己的属性">看我如何复制我的属性值</button> 
 <script>
 new Clipboard('.btn5', {
 text: function(trigger) {
 return trigger.getAttribute('aria-label'); // 操作属性值
 }
 })
 </script>
在vue项目中,使用如上方法,ios会有bug,可以安装vue-cliboards组件
1、安装vue-clipboards1
npm install vue-clipboards
2、导入(可放在组件中也可放在main.js中)1
2
3import Vue from 'vue'
import VueClipboards from 'vue-clipboards'
Vue.user(VueClipboards)
3、使用1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<button v-clipboard="copyData" @success="handleSuccess" @error="handleError">Copy</button>
new Vue({
  data() {
    return {
      copyData: 'copy data'
    }
  },
  methods: {
    handleSuccess(e) {
      console.log(e);
    },
    handleError(e) {
      console.log(e);
    }
  }
});
4、说明
该组件默认只能绑定一个
解决办法:
  4.1 增加:key=”1”
  1
2<button v-clipboard="copyData1" :key="1" @success="handleSuccess" @error="handleError">Copy</button>
<button v-clipboard="copyData2" :key="2" @success="handleSuccess" @error="handleError">Copy</button>
  具体见:https://github.com/zhuowenli/vue-clipboards/blob/master/example/App.vue#L8
  4.2 可以考虑设置一个真实复制的按钮,其他按钮trigger click给这个按钮