2011
Oct
23
HTML5 支援拖拉圖片到網頁,上傳圖片。(drag)
假設一個 div ,是我們要拖拉圖片進入的tag。
- <div id="dragBox" style="height:100px;width:200px;border:1px solid #a00;padding:10px;" >
- 請拖曳圖片至此
- </div>
使用 JQuery 對div綁事件 , ondragenter, ondragover, ondrop
- function bindEvent(obj){
- $(obj).bind("dragover",ondragover);
- $(obj).bind("dragenter",ondragenter);
- $(obj).bind("dragleave",ondragleave);
- $(obj).get(0).addEventListener("drop", ondragdrop, false);
- //這裡不能用 JQuery bind drop event , 否則 event.dataTransfer 會抓不到
- }
Event : onDragEnter
- 拖拉圖片進 div 時,觸發ondragenter 事件。
- function ondragenter(){
- //變更div css 效果
- event.stopPropagation();
- event.preventDefault();
- }
Event : onDragLeave
- 拖拉圖片離開 div 時,觸發ondragleave 事件
- function ondragenter(){
- //變更div css 效果
- event.stopPropagation();
- event.preventDefault();
- }
Event : onDragOver
- 拖拉圖片在 div上移動時,觸發事件
- function ondragover(){
- event.stopPropagation();
- event.preventDefault();
- }
Event : onDrop
- 拖拉圖片在 div上放開時,觸發事件
- function ondrop(event){
- event.stopPropagation();
- event.preventDefault();
- var dt = event.dataTransfer;
- var files = dt.files;
- }
載入user拖拉進來的圖片
- 使用HTML5 中的dataTransfer物件。
- 使用Filelist來取得檔案名稱,以及檔案尺寸。
- 從Filelist取得 file後,其屬性如下
- size = 71189
- type = image/jpeg
- //切割檔案 mozSlice(start,end);
- mozSlice = function mozSlice() { [native code] }
- name = Sunset.jpg
- mozFullPath =
- 使用 FileReader 來讀取user local端的圖片,FileReader會回傳base64編碼後的檔案格式 (data uri)。
- 格式大概是長這樣,它不是亂碼XD
data:image/jpeg;base64,/9j/4AAQSkZJRgABA....
- 範例程式
- function getFiles(event){
- var dt = event.dataTransfer;
- var files = dt.files;
- var n = files.length;
- for (var i = 0; i < n; i++) {
- var file = files[i];
- var fileName=file.name;
- var reader = new FileReader();
- reader.readAsDataURL(file);
- reader.onloadend =function(event){
- var filedata = event.target.result;
- $(document.body).append("<img src='"+filedata+"' />")
- }
- }
- }