XML/HTML Code復(fù)制內(nèi)容到剪貼板
- <div id="box" style="width: 800px; height: 400px; border: 1px solid;" contenteditable="true"></div>
- <script type="text/javascript" src="UploadImage.js"></script>
- new UploadImage("box", "UploadHandler.ashx").upload(function (xhr) {//上傳完成后的回調(diào)
- var img = new Image();
- img.src = xhr.responseText;
- this.appendChild(img);
- });
AMD/CMD
XML/HTML Code復(fù)制內(nèi)容到剪貼板
- <div id="box" style="width: 800px; height: 400px; border: 1px solid;" contenteditable="true"></div>
- <script type="text/javascript" src="require.js"></script>
- <script>
- require(['UploadImage'], function (UploadImage) {
- new UploadImage("box", "UploadHandler.ashx").upload(function (xhr) {//上傳完成后的回調(diào)
- var img = new Image();
- img.src = xhr.responseText;
- this.appendChild(img);
- });
- })
- </script>
三.瀏覽器支持
當(dāng)前版本只支持以下,瀏覽器,后期可能會支持更多瀏覽器。
•IE11
•Chrome
•FireFox
•Safari(未測式,理論應(yīng)該支持)
四.原理及源碼
1.粘貼上傳
處理目標(biāo)容器(id)的paste事件,讀取e.clipboardData中的數(shù)據(jù),如果是圖片進(jìn)行以下處理:
用H5 File API(FileReader)獲取文件的base64代碼,并構(gòu)建FormData異步上傳。
2.拖拽上傳
處理目標(biāo)容器(id)的drop事件,讀取e.dataTransfer.files(H5 File API: FileList)中的數(shù)據(jù),如果是圖片并構(gòu)建FormData異步上傳。
以下是初版本代碼,比較簡單。不再贅述。
部份核心代碼
XML/HTML Code復(fù)制內(nèi)容到剪貼板
- function UploadImage(id, url, key)
- {
- this.element = document.getElementById(id);
- this.url = url; //后端處理圖片的路徑
- this.imgKey = key || "PasteAreaImgKey"; //提到到后端的name
- }
- UploadImage.prototype.paste = function (callback, formData)
- {
- var thatthat = this;
- this.element.addEventListener('paste', function (e) {//處理目標(biāo)容器(id)的paste事件
- if (e.clipboardData && e.clipboardData.items[0].type.indexOf('image') > -1) {
- var that = this,
- reader = new FileReader();
- file = e.clipboardData.items[0].getAsFile();//讀取e.clipboardData中的數(shù)據(jù):Blob對象
- reader.onload = function (e) { //reader讀取完成后,xhr上傳
- var xhr = new XMLHttpRequest(),
- fd = formData || (new FormData());;
- xhr.open('POST', thatthat.url, true);
- xhr.onload = function () {
- callback.call(that, xhr);
- }
- fd.append(thatthat.imgKey, this.result); // this.result得到圖片的base64
- xhr.send(fd);
- }
- reader.readAsDataURL(file);//獲取base64編碼
- }
- }, false);
- }