這篇文章給大家分享的是有關(guān)基于js粘貼事件paste的示例分析的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
目前只有Chrome支持獲取剪切板中的圖片數(shù)據(jù)。還好需要這個功能的產(chǎn)品目前只支持Chrome
和Safari
,一些Chrome
的新特性是可以盡情使用了,還是能夠覆蓋到大部分用戶的。所以本文只討論Chrome
如何使用和如何阻止Safari
,原理大概了解了,再研究其他瀏覽器相關(guān)的問題就容易多了。
paste事件
可以用js給頁面中的元素綁定paste事件的方法,當(dāng)用戶鼠標(biāo)在該元素上或者該元素處于focus狀態(tài),綁定到paste事件的方法就運(yùn)行了。
綁定的元素不一定是input,普通的div也是可以綁定的,如果是給document綁定了,就相當(dāng)于全局了,任何時候的粘貼操作都會觸發(fā)。
事件對象
獲取事件對象
先寫一下事件綁定的代碼
pasteEle.addEventListener("paste", function (e){ if ( !(e.clipboardData && e.clipboardData.items) ) { return; } });
粘貼事件提供了一個clipboardData的屬性,如果該屬性有items屬性,那么就可以查看items
中是否有圖片類型的數(shù)據(jù)了。Chrome
有該屬性,Safari
沒有。
clipboardData介紹
介紹一下clipboardData對象,它實(shí)際上是一個DataTransfer類型的對象,DataTransfer是拖動產(chǎn)生的一個對象,但實(shí)際上粘貼事件也是它。
clipboardData的屬性介紹
屬性 | 類型 | 說明 |
---|---|---|
dropEffect | String | 默認(rèn)是 none |
effectAllowed | String | 默認(rèn)是 uninitialized |
files | FileList | 粘貼操作為空List |
items | DataTransferItemList | 剪切板中的各項(xiàng)數(shù)據(jù) |
types | Array | 剪切板中的數(shù)據(jù)類型 該屬性在Safari下比較混亂 |
items介紹
items是一個DataTransferItemList對象,自然里面都是DataTransferItem類型的數(shù)據(jù)了。
屬性
items的DataTransferItem有兩個屬性kind和type
屬性 | 說明 |
---|---|
kind | 一般為string 或者file |
type | 具體的數(shù)據(jù)類型,例如具體是哪種類型字符串或者哪種類型的文件,即MIME-Type |
方法
方法 | 參數(shù) | 說明 |
---|---|---|
getAsFile | 空 | 如果kind 是file ,可以用該方法獲取到文件 |
getAsString | 回調(diào)函數(shù) | 如果kind 是string ,可以用該方法獲取到字符串,字符串需要用回調(diào)函數(shù)得到,回調(diào)函數(shù)的第一個參數(shù)就是剪切板中的字符串 |
在原型上還有一些其他方法,不過在處理剪切板操作的時候一般用不到了。
types介紹
一般types中常見的值有
text/plain、text/html、Files
值 | 說明 |
---|---|
text/plain | 普通字符串 |
text/html | 帶有樣式的html |
Files | 文件(例如剪切板中的數(shù)據(jù)) |
簡單demo
pasteEle.addEventListener("paste", function (e){ if ( !(e.clipboardData && e.clipboardData.items) ) { return ; } for (var i = 0, len = e.clipboardData.items.length; i < len; i++) { var item = e.clipboardData.items[i]; if (item.kind === "string") { item.getAsString(function (str) { // str 是獲取到的字符串 }) } else if (item.kind === "file") { var pasteFile = item.getAsFile(); // pasteFile就是獲取到的文件 } } });
注意如果是string類型的數(shù)據(jù),可能針對具體是text/plain、text/html進(jìn)行分別的處理。
坑在這里
根據(jù)親自測驗(yàn),遇到了一個很大的坑,暫時還不知道該怎么解決:
當(dāng)ctrl+c復(fù)制圖片并粘貼之后,clipboaddata的
DataTransferItem {kind: "string", type: "text/html"}
即輸出的str:
<meta http-equiv="content-type" content="text/html; charset=utf-8"><img src="https://cache.yisu.com/upload/information/20200622/114/66116.jpg" alt="大媽們在雅西高速上跳廣場舞 被警察及時阻止"/>
當(dāng)右鍵復(fù)制圖片并粘貼之后,
DataTransferItem {kind: "file", type: "image/png"}
所以這里對于圖片如果想要獲取粘貼的圖片進(jìn)行上傳,只有直接右鍵復(fù)制的圖片才能識別到,ctrl+c的并不能識別.....
感謝各位的閱讀!關(guān)于“基于js粘貼事件paste的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前名稱:基于js粘貼事件paste的示例分析-創(chuàng)新互聯(lián)
當(dāng)前地址:http://jinyejixie.com/article34/dijope.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、電子商務(wù)、用戶體驗(yàn)、網(wǎng)站排名、全網(wǎng)營銷推廣、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容