最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于js粘貼事件paste簡單解析以及遇到的坑

 更新時間:2017年09月07日 08:47:37   作者:蓓蕾心晴  
下面小編就為大家?guī)硪黄趈s粘貼事件paste簡單解析以及遇到的坑。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在用戶執(zhí)行粘貼操作的時候,js能夠獲得剪切板的內(nèi)容,本文討論一下這個問題。

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

paste事件

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

綁定的元素不一定是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對象,它實際上是一個DataTransfer類型的對象,DataTransfer是拖動產(chǎn)生的一個對象,但實際上粘貼事件也是它。

clipboardData的屬性介紹

屬性 類型 說明
dropEffect String 默認是 none
effectAllowed String 默認是 uninitialized
files FileList 粘貼操作為空List
items DataTransferItemList 剪切板中的各項數(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 如果kindfile,可以用該方法獲取到文件
getAsString 回調(diào)函數(shù) 如果kindstring,可以用該方法獲取到字符串,字符串需要用回調(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ù)親自測驗,遇到了一個很大的坑,暫時還不知道該怎么解決:

當(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="http://img1.gtimg.com/cd/pics/hv1/154/103/2237/145487344.jpg" alt="大媽們在雅西高速上跳廣場舞 被警察及時阻止"/>

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

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

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

最近自己在研究看能不能通過復(fù)制任意地方的圖片,粘貼到本地富文本編輯器窗口,粘貼自動上傳,這里研究了一下paste事件,但是相關(guān)事件很多,繼續(xù)摸索中....

以上這篇基于js粘貼事件paste簡單解析以及遇到的坑就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 微信小程序?qū)崿F(xiàn)視頻播放器發(fā)送彈幕

    微信小程序?qū)崿F(xiàn)視頻播放器發(fā)送彈幕

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)視頻播放器發(fā)送彈幕,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 微信小程序語音同步智能識別的實現(xiàn)案例代碼解析

    微信小程序語音同步智能識別的實現(xiàn)案例代碼解析

    在一些小程序的開發(fā)場景中經(jīng)常會有語音轉(zhuǎn)文字的需求,今天小編通過實際案例給大家分享微信小程序語音同步智能識別功能,需要的朋友可以參考下
    2020-05-05
  • 深入了解JavaScript中的new關(guān)鍵字

    深入了解JavaScript中的new關(guān)鍵字

    手寫new是JS面試題高頻考點,實現(xiàn)代碼也非常簡單,但在實現(xiàn)后小編對其為什么要這樣設(shè)計有著很深的疑惑,今天就來講一下為什么要這樣設(shè)計new的實現(xiàn)吧
    2023-05-05
  • JS簡單實現(xiàn)點擊按鈕或文字顯示遮罩層的方法

    JS簡單實現(xiàn)點擊按鈕或文字顯示遮罩層的方法

    這篇文章主要介紹了JS簡單實現(xiàn)點擊按鈕或文字顯示遮罩層的方法,涉及javascript鼠標事件響應(yīng)及頁面元素屬性動態(tài)操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-04-04
  • JavaScript仿淘寶放大鏡效果

    JavaScript仿淘寶放大鏡效果

    這篇文章主要為大家詳細介紹了JavaScript仿淘寶放大鏡效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • JavaScript統(tǒng)計字符出現(xiàn)次數(shù)

    JavaScript統(tǒng)計字符出現(xiàn)次數(shù)

    這篇文章主要為大家詳細介紹了JavaScript字符統(tǒng)計出現(xiàn)次數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • javascript用defineProperty實現(xiàn)簡單的雙向綁定方法

    javascript用defineProperty實現(xiàn)簡單的雙向綁定方法

    這篇文章主要介紹了javascript用defineProperty實現(xiàn)簡單的雙向綁定方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • webpack中使用Eslint的實現(xiàn)

    webpack中使用Eslint的實現(xiàn)

    本文主要介紹了webpack中使用Eslint的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • javascript中setInterval的用法

    javascript中setInterval的用法

    這篇文章主要介紹了javascript中setInterval的用法的相關(guān)資料,需要的朋友可以參考下
    2015-07-07

最新評論

庆云县| 秀山| 虎林市| 甘肃省| 石景山区| 大宁县| 青铜峡市| 汤阴县| 当雄县| 永嘉县| 甘孜| 海阳市| 洮南市| 道孚县| 聂荣县| 三河市| 苏州市| 云霄县| 浙江省| 潞城市| 买车| 车险| 洪洞县| 斗六市| 南充市| 湘潭县| 自治县| 西充县| 铜鼓县| 丹东市| 苗栗市| 普安县| 金湖县| 瓮安县| 宁化县| 弥勒县| 嘉兴市| 西吉县| 曲阳县| 罗山县| 徐闻县|