基于js粘貼事件paste的示例分析

這篇文章給大家分享的是有關(guān)基于js粘貼事件paste的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

從網(wǎng)站建設(shè)到定制行業(yè)解決方案,為提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作服務(wù)體系,各種行業(yè)企業(yè)客戶提供網(wǎng)站建設(shè)解決方案,助力業(yè)務(wù)快速發(fā)展。創(chuàng)新互聯(lián)將不斷加快創(chuàng)新步伐,提供優(yōu)質(zhì)的建站服務(wù)。

目前只有Chrome支持獲取剪切板中的圖片數(shù)據(jù)。還好需要這個(gè)功能的產(chǎn)品目前只支持ChromeSafari,一些Chrome的新特性是可以盡情使用了,還是能夠覆蓋到大部分用戶的。所以本文只討論Chrome如何使用和如何阻止Safari,原理大概了解了,再研究其他瀏覽器相關(guān)的問(wèn)題就容易多了。

paste事件

可以用js給頁(yè)面中的元素綁定paste事件的方法,當(dāng)用戶鼠標(biāo)在該元素上或者該元素處于focus狀態(tài),綁定到paste事件的方法就運(yùn)行了。

綁定的元素不一定是input,普通的div也是可以綁定的,如果是給document綁定了,就相當(dāng)于全局了,任何時(shí)候的粘貼操作都會(huì)觸發(fā)。

事件對(duì)象

獲取事件對(duì)象

先寫一下事件綁定的代碼

pasteEle.addEventListener("paste", function (e){
 if ( !(e.clipboardData && e.clipboardData.items) ) {
  return;
 }
});

粘貼事件提供了一個(gè)clipboardData的屬性,如果該屬性有items屬性,那么就可以查看items中是否有圖片類型的數(shù)據(jù)了。Chrome有該屬性,Safari沒(méi)有。

clipboardData介紹

介紹一下clipboardData對(duì)象,它實(shí)際上是一個(gè)DataTransfer類型的對(duì)象,DataTransfer是拖動(dòng)產(chǎn)生的一個(gè)對(duì)象,但實(shí)際上粘貼事件也是它。

clipboardData的屬性介紹

屬性類型說(shuō)明
dropEffectString默認(rèn)是 none
effectAllowedString默認(rèn)是 uninitialized
filesFileList粘貼操作為空List
itemsDataTransferItemList剪切板中的各項(xiàng)數(shù)據(jù)
typesArray剪切板中的數(shù)據(jù)類型 該屬性在Safari下比較混亂

items介紹

items是一個(gè)DataTransferItemList對(duì)象,自然里面都是DataTransferItem類型的數(shù)據(jù)了。

屬性

items的DataTransferItem有兩個(gè)屬性kind和type

屬性說(shuō)明
kind一般為string或者file
type具體的數(shù)據(jù)類型,例如具體是哪種類型字符串或者哪種類型的文件,即MIME-Type

方法

方法參數(shù)說(shuō)明
getAsFile如果kindfile,可以用該方法獲取到文件
getAsString回調(diào)函數(shù)如果kindstring,可以用該方法獲取到字符串,字符串需要用回調(diào)函數(shù)得到,回調(diào)函數(shù)的第一個(gè)參數(shù)就是剪切板中的字符串

在原型上還有一些其他方法,不過(guò)在處理剪切板操作的時(shí)候一般用不到了。

types介紹

一般types中常見(jiàn)的值有

text/plain、text/html、Files
說(shuō)明
text/plain普通字符串
text/html帶有樣式的html
Files文件(例如剪切板中的數(shù)據(jù))

簡(jiǎn)單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ù),可能針對(duì)具體是text/plain、text/html進(jìn)行分別的處理。

坑在這里

根據(jù)親自測(cè)驗(yàn),遇到了一個(gè)很大的坑,暫時(shí)還不知道該怎么解決:

當(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="/upload/otherpic56/66116.jpg" alt="大媽們?cè)谘盼鞲咚偕咸鴱V場(chǎng)舞 被警察及時(shí)阻止"/>

當(dāng)右鍵復(fù)制圖片并粘貼之后,

DataTransferItem {kind: "file", type: "image/png"}

所以這里對(duì)于圖片如果想要獲取粘貼的圖片進(jìn)行上傳,只有直接右鍵復(fù)制的圖片才能識(shí)別到,ctrl+c的并不能識(shí)別.....

感謝各位的閱讀!關(guān)于“基于js粘貼事件paste的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

分享名稱:基于js粘貼事件paste的示例分析
URL標(biāo)題:http://muchs.cn/article8/ghooip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航軟件開(kāi)發(fā)、定制網(wǎng)站、建站公司、網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)