vue一键复制到剪切板 兼容主流浏览器

 方法一:vue-clipboard2

vue-clipboard2是前端能够调用剪切板的一个插件。具体的描述官网上也有具体的说明,

官网:vue-clipboard2 | A simple vue2 binding to clipboard.js
npm地址:vue-clipboard2 - npm
github地址:GitHub - Inndy/vue-clipboard2: A simple vue2 binding to clipboard.js

npm下载:

npm install --save vue-clipboard2

引入:

import Vue from 'vue'
import VueClipBoard from 'vue-clipboard2'
Vue.use(VueClipBoard);

使用:

方式1:复制输入框内的文字

<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>
  </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')
    }
  }
})
</script>

方式2:复制设定的文字

<div id="app"></div>

  <template id="t">
    <div class="container">
    <input type="text" v-model="message">
    <button type="button" @click="doCopy">Copy!</button>
    </div>
  </template>

  <script>
  new Vue({
    el: '#app',
    template: '#t',
    data: function () {
      return {
        message: 'Copy These Text'
      }
    },
    methods: {
      doCopy: function () {
        this.$copyText(this.message).then(function (e) {
          alert('Copied')
          console.log(e)
        }, function (e) {
          alert('Can not copy')
          console.log(e)
        })
      }
    }
  })
  </script>

方法二:document.execCommand

<template>
  <div class="share" ref="share">
    <div @click="copyUrl" style="padding:20px">复制链接</div>
  </div>
</template>
<script>
export default {
  name: "share",
  data() {
    return {}
  },
  methods: {
    copyUrl() {
      let oDiv = document.createElement("div")//创建div
      oDiv.innerHTML = window.location.href//获取地址栏url作为div内容 可自定义
      oDiv.style.opacity = "0" //保证div不可见
      oDiv.style.width = "0"//保证div不可见
      oDiv.style.height = "0"//保证div不可见
      if (this.$refs.share) this.$refs.share.appendChild(oDiv) //将元素插入dom树

      const range = document.createRange(); //创建range范围对象
      range.selectNode(oDiv);//将div设置为范围对象内节点
      const selection = window.getSelection()//返回一个Selection选区对象,表示用户选择(点击)的文本范围或光标的当前位置
      if (selection.rangeCount > 0) selection.removeAllRanges();//清空选区中的范围对象
      selection.addRange(range);//将自建范围对象添加进选区
      const isCopy = document.execCommand('Copy');//拷贝当前选中内容(选区内容)到剪贴板 该方法返回Boolean
      oDiv.remove()//删除添加进dom树的div,保证页面无变化
      if (isCopy) {
        alert("复制成功");
      } else {
        alert("复制失败");
      }
    }
  }
}
</script>

注意:

document.execCommand目前兼容性很强,但该特性已经从 Web 标准中删除,也许会在未来的某个时间停止支持,请谨慎使用该特性。

document.execCommand - Web API 接口参考 | MDN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值