HTML5拖放(drag and drop)与plupload的懒人上传
HTML5拖放能夠將本地的文件拖放到頁面上,plupload又是很好的文件上傳插件,而今天就將兩者結合,做了個文件拖拽上傳的功能。
簡述HTML5拖放
拖放是HTML5標準的一部分,任何元素都能夠拖放,也能夠將本地的文件拖放到頁面上。
設置元素可拖放
為了使元素可拖動,把 draggable 屬性設置為 true
<img draggable="true" />拖放事件
有7個拖放事件可以捕獲,如下:
dragstart:開始拖元素觸發
dragenter:元素拖進可drop元素(綁定drop事件的元素)時觸發
dragover:當元素拖動到drop元素上時觸發
drop:當元素放下到drop元素觸發
dragleave :當元素離開drop元素時觸發
drag:每次元素被拖動時會觸發
dragend:放開拖動元素時觸發
完成一次拖放的事件過程是:?dragstart?–> dragenter?–> dragover?–> drop?–> dragend
瀏覽器支持
Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放。
拖拽上傳實現
先阻止頁面默認的拖放行為,不然頁面會被拖放的文件替換了。
//阻止瀏覽器默認行為 document.addEventListener( "dragleave", function(e) {e.preventDefault(); }, false); document.addEventListener( "drop", function(e) {e.preventDefault(); }, false); document.addEventListener( "dragenter", function(e) {e.preventDefault(); }, false); document.addEventListener( "dragover", function(e) {e.preventDefault(); }, false);初始化plupload
var uploader = new plupload.Uploader({runtimes : 'html5,flash,silverlight,html4',browse_button : iElement, //一個觸發的元素,寫一個隱藏的元素就行url : config.path.storePutFile,flash_swf_url : 'lib/plupload-2.1.8/js/Moxie.swf',silverlight_xap_url : 'lib/plupload-2.1.8/js/Moxie.xap',multiple_queues : false,multi_selection : true,init : {FilesAdded : function(up, files) {this.start();},//上傳進度UploadProgress : function(up, file) {console.log("UploadProgress--------------------------------------");},FileUploaded : function(up, file, info) {console.log("FileUploaded--------------------------------------");},Error : function(up, err) {console.log(err); }} });設置drop區域
當文件拖放到drop區域時,就能觸發上傳。
var box = element; //drop區域的DOM元素 box.addEventListener("drop", function (e) {var up = uploader; //plupload的實例對象var fileList = e.dataTransfer.files; //獲取文件對象//檢測是否是拖拽文件到頁面的操作if (fileList.length == 0) {return false;}for(var i = 0; i < fileList.length; i++){var reader = new FileReader();reader.onload = function(e) {up.addFile(file[i]);};reader.onerror = function(e){alert('目前只能上傳文件');}reader.readAsDataURL(file[i]);} }, false);注意
在addFile到plupload實例時,我加了一層FileReader的讀取,是因為HTML5的File對象有問題。HTML5 File對象在接收到文件夾的時候,不能辨別文件夾。例如你上傳一個命名為“123.jpg”的文件夾,HTML5 File會認為這是個圖片(囧,它是去截取后綴名去做文件類型判斷的),而這會導致plupload上傳失敗。所以我加一層FileReader,當是文件夾時候,會觸發onerror,是文件時就觸發onload,addFile之后觸發上傳行為。
總結
上傳之所以借助pluoload,是因為它本身支持HTML5上傳,而且還提供了上傳進度、上傳失敗回調等功能,可以節省很多功夫(當然可以自己做上傳)。而HTML5拖放只是選擇文件的方式,省卻了尋找文件的麻煩。
?
本文為原創文章,轉載請保留原出處,方便溯源,如有錯誤地方,謝謝指正。
本文地址 :http://www.cnblogs.com/lovesong/p/5014584.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的HTML5拖放(drag and drop)与plupload的懒人上传的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用AsyncTask实现图片加载
- 下一篇: Android监视返回键