需求
最近在做商城項(xiàng)目穗熬,有個需求是需要點(diǎn)擊復(fù)制訂單號的雷滋,然后就覺得可以使用原生的復(fù)制方法和使用第三方庫恭垦。
瀏覽器原生方法
這種方式兼容性不是太好,還要看瀏覽器是否支持漠另,容易采坑捏雌。
//在IE中可以用window.clipboardData.setData('text','內(nèi)容')實(shí)現(xiàn)。
//在IE中clipboardData是window的屬性,而其他瀏覽器則是相應(yīng)的event對象的屬性笆搓,這實(shí)際上是一種安全措施性湿,防止未經(jīng)授權(quán)的訪問,為了兼容其他瀏覽器纬傲,所以我們不能通過clipboardData來實(shí)現(xiàn)這種操作。
//具體做法:
//1.創(chuàng)建一個隱藏的input框
//2.點(diǎn)擊的時候肤频,將要復(fù)制的內(nèi)容放進(jìn)input框中
//3.選擇文本內(nèi)容input.select()
//4.這里只能用input或者textarea才能選擇文本叹括。
//5.執(zhí)行瀏覽器的復(fù)制命令document.execCommand("copy")。
function copyText() {
var text = document.getElementById("text").innerText; // 獲取要復(fù)制的內(nèi)容也可以傳進(jìn)來
var input = document.getElementById("input"); // 獲取隱藏input的dom
input.value = text; // 修改文本框的內(nèi)容
input.select(); // 選中文本
document.execCommand("copy"); // 執(zhí)行瀏覽器復(fù)制命令
alert("復(fù)制成功");
}
//在事件中可以通過e 對內(nèi)容進(jìn)行修飾
document.body.oncopy = e => {
// 監(jiān)聽全局復(fù)制 做點(diǎn)什么
}
// 還有這種寫法:
document.addEventListener("copy", e => {
// 監(jiān)聽全局復(fù)制 做點(diǎn)什么
});
使用clipboard.js
- 我們要先安裝
npm install clipboard --save
- 在
mian.js
中引入宵荒,當(dāng)然我們也可以在用到的.vue
中引入汁雷,因?yàn)槲也恢挂粋€地方用到了復(fù)制,所以直接在main.js
里面引入了希俩。
import clipboard from 'clipboard';
//注冊到vue原型上
Vue.prototype.clipboard = clipboard;
- 在需要的地方使用
//dom
···
<div class="sn Lfll Lmr20">訂單編號:
<span data-clipboard-action="copy" class="cobyOrderSn" :data-clipboard-text="orderData.orderSn" @click="copyLink">{{orderData.orderSn}}</span>
</div>
···
//js
···
copyLink() {
let _this = this;
let clipboard = new this.clipboard(".cobyOrderSn");
clipboard.on('success', function () {
_this.$toast("復(fù)制成功")
});
clipboard.on('error', function () {
_this.$toast("復(fù)制失敗")
});
}
···
當(dāng)然clipboard.js
的功能可不止這么簡單吮播,我們還可使用它進(jìn)行剪切沸柔,還可以通過它復(fù)制其他元素的值等,具體的使用可查看官方文檔:clipboard.js;
小結(jié)
關(guān)于瀏覽器一鍵復(fù)制厢漩,推薦使用clipboard.js
來做,因?yàn)楝F(xiàn)在原生方法兼容性并不是很好岩臣,而且clipboard.js
文件并不大溜嗜,但是卻可以幫我們做很多事情,減輕很多調(diào)試和避免采坑架谎。以上只是記錄一下自己遇到的問題粱胜,如有錯誤,還請指正狐树,如有幫助焙压,請關(guān)注點(diǎn)贊哈。