国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript復(fù)制內(nèi)容到剪貼板

ideaa / 1458人閱讀

摘要:原文鏈接最近一個(gè)活動(dòng)頁(yè)面中有一個(gè)小需求,用戶點(diǎn)擊或者長(zhǎng)按就可以復(fù)制內(nèi)容到剪貼板,記錄一下實(shí)現(xiàn)過(guò)程和遇到的坑。完整代碼如下復(fù)制成功總結(jié)以上就是關(guān)于如何實(shí)現(xiàn)復(fù)制內(nèi)容到剪貼板,附上幾個(gè)鏈接兼容性

原文鏈接:https://github.com/axuebin/ar...

最近一個(gè)活動(dòng)頁(yè)面中有一個(gè)小需求,用戶點(diǎn)擊或者長(zhǎng)按就可以復(fù)制內(nèi)容到剪貼板,記錄一下實(shí)現(xiàn)過(guò)程和遇到的坑。

常見方法

查了一下萬(wàn)能的Google,現(xiàn)在常見的方法主要是以下兩種:

第三方庫(kù):clipboard.js

原生方法:document.execCommand()

分別來(lái)看看這兩種方法是如何使用的。

clipboard.js

這是clipboard的官網(wǎng):https://clipboardjs.com/,看起來(lái)就是這么的簡(jiǎn)單。

引用

直接引用:

包: npm install clipboard --save ,然后 import Clipboard from "clipboard";

使用 從輸入框復(fù)制

現(xiàn)在頁(yè)面上有一個(gè) 標(biāo)簽,我們需要復(fù)制其中的內(nèi)容,我們可以這樣做:


import Clipboard from "clipboard";
const btnCopy = new Clipboard("btn");

注意到,在

import Clipboard from "clipboard";
const btnCopy = new Clipboard("btn");
this.copyValue = "hello world";
事件

有的時(shí)候我們需要在復(fù)制后做一些事情,這時(shí)候就需要回調(diào)函數(shù)的支持。

在處理函數(shù)中加入以下代碼:

// 復(fù)制成功后執(zhí)行的回調(diào)函數(shù)
clipboard.on("success", function(e) {
    console.info("Action:", e.action); // 動(dòng)作名稱,比如:Action: copy
    console.info("Text:", e.text); // 內(nèi)容,比如:Text:hello word
    console.info("Trigger:", e.trigger); // 觸發(fā)元素:比如:
    e.clearSelection(); // 清除選中內(nèi)容
});

// 復(fù)制失敗后執(zhí)行的回調(diào)函數(shù)
clipboard.on("error", function(e) {
    console.error("Action:", e.action);
    console.error("Trigger:", e.trigger);
});
小結(jié)

文檔中還提到,如果在單頁(yè)面中使用 clipboard ,為了使得生命周期管理更加的優(yōu)雅,在使用完之后記得 btn.destroy() 銷毀一下。

clipboard 使用起來(lái)是不是很簡(jiǎn)單。但是,就為了一個(gè) copy 功能就使用額外的第三方庫(kù)是不是不夠優(yōu)雅,這時(shí)候該怎么辦?那就用原生方法實(shí)現(xiàn)唄。

document.execCommand()方法

先看看這個(gè)方法在 MDN 上是怎么定義的:

which allows one to run commands to manipulate the contents of the editable region.

意思就是可以允許運(yùn)行命令來(lái)操作可編輯區(qū)域的內(nèi)容,注意,是可編輯區(qū)域

定義
bool = document.execCommand(aCommandName, aShowDefaultUI, aValueArgument)

方法返回一個(gè) Boolean 值,表示操作是否成功。

aCommandName :表示命令名稱,比如: copy, cut 等(更多命令見命令);

aShowDefaultUI:是否展示用戶界面,一般情況下都是 false

aValueArgument:有些命令需要額外的參數(shù),一般用不到;

兼容性

這個(gè)方法在之前的兼容性其實(shí)是不太好的,但是好在現(xiàn)在已經(jīng)基本兼容所有主流瀏覽器了,在移動(dòng)端也可以使用。

使用 從輸入框復(fù)制

現(xiàn)在頁(yè)面上有一個(gè) 標(biāo)簽,我們想要復(fù)制其中的內(nèi)容,我們可以這樣做:


const btn = document.querySelector("#btn");
btn.addEventListener("click", () => {
    const input = document.querySelector("#demoInput");
    input.select();
    if (document.execCommand("copy")) {
        document.execCommand("copy");
        console.log("復(fù)制成功");
    }
})
其它地方復(fù)制

有的時(shí)候頁(yè)面上并沒(méi)有 標(biāo)簽,我們可能需要從一個(gè)

中復(fù)制內(nèi)容,或者直接復(fù)制變量。

還記得在 execCommand() 方法的定義中提到,它只能操作可編輯區(qū)域,也就是意味著除了