国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

js實現ctrl+v粘貼上傳圖片(兼容chrome、firefox、ie11)

2019-11-20 10:25:47
字體:
來源:轉載
供稿:網友

我們或多或少都使用過各式各樣的富文本編輯器,其中有一個很方便功能,復制一張圖片然后粘貼進文本框,這張圖片就被上傳了,那么這個方便的功能是如何實現的呢?

原理分析
提取操作:復制=>粘貼=>上傳
在這個操作過程中,我們需要做的就是:監聽粘貼事件=>獲取剪貼板里的內容=>發請求上傳
為方便理解下文,需要先明白幾點:

  • 我們只能上傳網頁圖(在網頁上右鍵圖片,然后復制)和截圖(截圖工具截的圖片,eg:qq截圖),不能粘貼上傳系統里的圖片(從桌面上、硬盤里復制),他們是存在完全不同的地方的。
  • 截圖工具截的圖與在網頁點擊右鍵復制的圖是有些不同的,因此處理方式也不一樣。
  • 知悉paste event這個事件:當進行粘貼(右鍵paste/ctrl+v)操作時,該動作將觸發名為'paste'的剪貼板事件,這個事件的觸發是在剪貼板里的數據插入到目標元素之前。如果目標元素(光標所在位置)是可編輯的元素(eg:設置了contenteditable屬性的div。textarea并不行。),粘貼動作將把剪貼板里的數據,以最合適的格式,插入到目標元素里;如果目標元素不可編輯,則不會插入數據,但依然觸發paste event。數據在粘貼的過程中是只讀的。此段是翻譯于w3.org_the-paste-action。
  • 可惜的是,經過試驗,發現chrome(當前最新版)、firefox(當前最新版)、ie11對paste事件的實現并不是完全按照w3c來的,各自也有區別(w3c的paste標準也因此只是草案階段)。

test代碼及截圖如下:

chrome:

<textarea ></textarea> <div contenteditable style="width: 100px;height: 100px; border:1px solid"> </div> <script> document.addEventListener('paste', function (event) {   console.log(event) })</script>

  1. event有clipboardData屬性,且clipboardData有item屬性,clipboardData.item中的元素(對象)有type和kind屬性;
  2. 無論在哪進行粘貼,均可觸發paste事件;
  3. 在div(未特殊聲明時,本文div均指設置了contenteditable屬性的div) 里粘貼截圖,不顯示圖片。img.src為base64編碼字符串;
  4. 在div里粘貼網頁圖片,直接顯示圖片,img.src為圖片地址。

firefox:

  1. event有clipboardData屬性,clipboardData沒有item屬性;
  2. 只有在textarea里或者可編輯的div(里才粘貼才觸發paste事件;
  3. 在div里粘貼截圖,直接顯示圖片,img.src為base64編碼字符串;
  4. 在div里粘貼網頁圖片,表現同chrome。

ie11:(不截圖了,可自行試驗,其他瀏覽器同理<( ̄

主站蜘蛛池模板: 湖北省| 格尔木市| 郓城县| 丘北县| 德安县| 突泉县| 手机| 宜良县| 贵州省| 阿拉善右旗| 乌拉特前旗| 东乡| 临颍县| 洪洞县| 宣汉县| 汝州市| 通化县| 通化市| 逊克县| 嘉善县| 衡山县| 郴州市| 桐柏县| 曲周县| 故城县| 宽甸| 马龙县| 阿城市| 金平| 齐河县| 科技| 东乌珠穆沁旗| 合作市| 滨海县| 深州市| 马龙县| 田林县| 辉县市| 二手房| 湘乡市| 黄浦区|