在拖放的過程中會觸發(fā)以下事件:

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、花山網(wǎng)絡(luò)推廣、成都小程序開發(fā)、花山網(wǎng)絡(luò)營銷、花山企業(yè)策劃、花山品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供花山建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:chinadenli.net
在拖動目標(biāo)上觸發(fā)事件 (源元素)
ondragstart?- 用戶開始拖動元素時觸發(fā)
ondrag?- 元素正在拖動時觸發(fā)
ondragend?- 用戶完成元素拖動后觸發(fā)
釋放目標(biāo)時觸發(fā)的事件
ondragenter?- 當(dāng)被鼠標(biāo)拖動的對象進(jìn)入其容器范圍內(nèi)時觸發(fā)此事件
ondragover?- 當(dāng)某被拖動的對象在另一對象容器范圍內(nèi)拖動時觸發(fā)此事件
ondragleave?- 當(dāng)被鼠標(biāo)拖動的對象離開其容器范圍內(nèi)時觸發(fā)此事件
ondrop?- 在一個拖動過程中,釋放鼠標(biāo)鍵時觸發(fā)此事件
event對象(以e代替)
e.target
W3Cschool上的解釋是:返回觸發(fā)此事件的元素(事件的目標(biāo)節(jié)點),這個target屬性只兼容ie9及以上
e.preventDefault()
取消事件的默認(rèn)動作。
e.dataTransfer.setData()
設(shè)置被拖數(shù)據(jù)的數(shù)據(jù)類型和值。
e.dataTransfer.getData()
獲得被拖的數(shù)據(jù)。
把文件從桌面拖拽到瀏覽器是Web應(yīng)用程序集成的最終目標(biāo)之一。本教程共四篇文章(本文是第一篇),主要介紹了:
1.實現(xiàn)將文件拖放到頁面元素上
2.在JavaScript中分析被拖放的文件
3.在客戶端上加載和解析文件
4.使用XMLHttpRequest2將文件異步上傳到服務(wù)器
5.上傳時,顯示圖形進(jìn)度條
6.使用進(jìn)程增強( progressive enhancement)以確保文件上傳表單在所有瀏覽器正常工作
7.純JavaScript代碼,不使用其它庫。
咻,開始吧!
糟糕的瀏覽器支持
在開始之前說明一下,這個教程使用了一些HTML5的最新技術(shù),可能以后會被修正。目前代碼可以正常工作,但是很可能隨著API的變化或者瀏覽器升級而受到影響。
§Firefox和Chrome的最新版本支持所有的功能并且可以完美運行。
§Opera可以用JavaScript解析文件,但未實現(xiàn)拖放文件和XMLHttpRequest2上傳。
§IE瀏覽器和桌面版本的Safari不支持所有的API。
§蘋果已禁用Safari瀏覽器的iPhone和iPad版本的HTML文件上傳表單。有誰知道為什么嗎?
最后,請注意我的代碼只是演示了基本概念,幾乎沒有錯誤檢查,因此需要進(jìn)行修改以適應(yīng)你的工作需要。
HTML和CSS
這是我們的帶有文件輸入類型的標(biāo)準(zhǔn)表單。唯一的HTML5特性是“multiple”屬性,它允許用戶選擇任意數(shù)量的文件。
我們將上傳文件到運行PHP的服務(wù)器上,但是無論你在服務(wù)器端使用什么技術(shù),代碼是大致相同的。隱藏的MAX_FILE_SIZE值指定為300,000個字節(jié),這是PHP使用的,但我們還會在瀏覽器端用它進(jìn)行檢查,以防止大文件上傳。
#filedrag元素將被用作接收拖放文件的位置。元素是通過CSS隱藏的,但如果瀏覽器支持拖拽的話,它會在JavaScript中被顯示:
我們還定義了一個.hover類,當(dāng)用戶拖動文件到相應(yīng)區(qū)域元素時,改變元素的顯示風(fēng)格。瀏覽器不支持在那種情況下的:hover風(fēng)格,但當(dāng)事件觸發(fā)時,我們可以用JavaScript添加類。
文件操作API
W3C 文件操作API
提供了一些對象,我們使用了:
§FileList:代表選定的文件數(shù)組。
§File:代表一個單獨的文件。
§FileReader:支持JavaScript的客戶端讀取文件數(shù)據(jù)的接口。
Javascript事件
是時候處理JavaScript代碼了。我們不使用任何JavaScript庫,為了節(jié)省時間,我們將創(chuàng)建一個輔助函數(shù)返回元素的ID和輸出狀態(tài)消息:
我們將在Init()函數(shù)里檢查文件操作API是否有效:
Init()函數(shù)說明:
1.給文件輸入元素設(shè)置一個“change”事件監(jiān)聽器。
2.顯示#filedrag元素。
3.設(shè)置“dragover”和“dragleave”事件監(jiān)聽器,以改變的#filedrag元素的風(fēng)格。
4.給#filedrag元素設(shè)置一個“drop”的事件監(jiān)聽器。
5.隱藏表單的提交按鈕 - 它不是必需的,因為當(dāng)文件被選中時我們將進(jìn)行分析和上傳,而不是提交表單。
或者,當(dāng)瀏覽器支持文件拖動時,你可以隱藏文件輸入元素。就個人而言,我更愿意同時提供兩種選擇,因為拖放實際上會帶來實用性的問題。
XMLHttpRequest.upload方法檢查防止在Opera中的問題。瀏覽器支持File,F(xiàn)ileList和FileReader,但不支持拖放事件或XMLHttpRequest2。因此,它可以顯示文件信息,但我們不希望顯示#filedrag的元素或刪除submit按鈕。
改變文件拖放風(fēng)格
很少人在瀏覽器中進(jìn)行過文件拖放。事實上,經(jīng)驗豐富的網(wǎng)絡(luò)用戶也不太考慮是否可行。因此,我們使用了標(biāo)有“drop files here”的元素。當(dāng)文件拖到#filedrag上時,我們還通過改變元素的風(fēng)格來進(jìn)行顯示。
分析放下或被選中的文件
無論是使用“Browse”按鈕來選中一個或多個文件,或者將文件拖放到拖#filedrag的位置上,我們使用的的相同F(xiàn)ileSelectHandler()函數(shù)來進(jìn)行處理:
函數(shù)說明:
1.調(diào)用FileDragHover()刪除hover風(fēng)格和取消瀏覽器的事件。這是必不可少的,否則瀏覽器可能會嘗試顯示該文件。
2.獲取一個FileList對象,無論是從文件輸入框(e.target.files)或#filedrag元素(例如dataTransfer.files)。
3.最后,函數(shù)遍歷FileList的所有File對象,并把它作為一個參數(shù)傳遞給ParseFile()函數(shù)...
該函數(shù)輸出的信息是File對象提供的三個主要的只讀屬性:
§.name: 文件名 (不包含文件路徑)。
§.type: MIME類型, 例如 image/jpeg,text/plain等等。
§.size: 文件大小(字節(jié)).
可以參考chrome小樂圖客擴展的截圖功能,支持粘貼剪貼板圖片、拖拽圖片、或者粘貼圖片網(wǎng)址上傳,是通過html5 file reader實現(xiàn)的。
,首先要判斷拖入的文件是否符合要求,包括圖片類型、大小等,然后獲取本地圖片信息,實現(xiàn)預(yù)覽,最后上傳。
$(function(){
...接上部分
var box = document.getElementById('drop_area'); //拖拽區(qū)域
box.addEventListener("drop",function(e){
e.preventDefault(); //取消默認(rèn)瀏覽器拖拽效果
var fileList = e.dataTransfer.files; //獲取文件對象
//檢測是否是拖拽文件到頁面的操作
if(fileList.length == 0){
return false;
}
//檢測文件是不是圖片
if(fileList[0].type.indexOf('image') === -1){
alert("您拖的不是圖片!");
return false;
}
//拖拉圖片到瀏覽器,可以實現(xiàn)預(yù)覽功能
var img = window.webkitURL.createObjectURL(fileList[0]);
var filename = fileList[0].name; //圖片名稱
var filesize = Math.floor((fileList[0].size)/1024);
if(filesize500){
alert("上傳大小不能超過500K.");
return false;
}
var str = "img src='"+img+"'p圖片名稱:"+filename+"/pp大小:"+filesize+"KB/p";
$("#preview").html(str);
//上傳
xhr = new XMLHttpRequest();
xhr.open("post", "upload.php", true);
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
var fd = new FormData();
fd.append('mypic', fileList[0]);
xhr.send(fd);
},false);
});
1.離線緩存為HTML5開發(fā)移動應(yīng)用提供了基礎(chǔ)
HTML5 Web Storage API可以看做是加強版的cookie,不受數(shù)據(jù)大小限制,有更好的彈性以及架構(gòu),可以將數(shù)據(jù)寫入到本機的ROM中,還可以在關(guān)閉瀏覽器后再次打開時恢復(fù)數(shù)據(jù),以減少網(wǎng)絡(luò)流量。
同時,這個功能算得上是另一個方向的后臺“操作記錄”,而不占用任何后臺資源,減輕設(shè)備硬件壓力,增加運行流暢性。
在線app支持邊使用邊下載離線緩存,或者不下載離線緩存;而離線app必須是下載完離線
設(shè)計師要知道,什么時候讓用戶下載離線緩存(注意在線和離線app的區(qū)別)。
2.音頻視頻自由嵌入,多媒體形式更為靈活
原生開發(fā)方式對于文字和音視頻混排的多媒體內(nèi)容處理相對麻煩,需要拆分開文字、圖片、音頻、視頻,解析對應(yīng)的URL并分別用不同的方式處理。
HTML5在這個方面完全不受限制,可以完全放在一起進(jìn)行處理。
設(shè)計師要知道,如果新聞類、微博類、社交類應(yīng)用的信息呈現(xiàn)中實現(xiàn)文字與多媒體混排,而不用專門嵌入webview,將是一件多美好的事情,至少現(xiàn)在原生方式實現(xiàn)起來還有困難。
3.地理定位,隨時隨地分享位置
充分發(fā)揮移動設(shè)備對定位上的優(yōu)勢,推動LBS應(yīng)用發(fā)展。
可以綜合使用GPS、wifi、手機等方式讓定位更為精準(zhǔn)、靈活。
地理位置定位,讓定位和導(dǎo)航不再專屬導(dǎo)航軟件,地圖也不用下載非常大的地圖包,可以通過緩存來解決,到哪兒下哪兒,更靈活。
設(shè)計師要知道,現(xiàn)在嵌入LBS功能的應(yīng)用越來越多,這也是移動設(shè)備與臺式PC相比最大的優(yōu)勢之一,HTML5能把這個優(yōu)勢再度擴大化,好好想想怎么在你設(shè)計的應(yīng)用里用上吧!
4.Canvas繪圖,提升移動平臺的繪圖能力
使用Canvas API可以簡單繪制熱點圖收集用戶體驗資料
支持圖片的移動、旋轉(zhuǎn)、縮放等常規(guī)編輯
Canvas – 2D的繪圖功能支持
Canvas 3D – 3D的繪圖功能支持
SVG – 向量圖支援
設(shè)計師要知道,圖片的移動、旋轉(zhuǎn)、縮放?那都太基礎(chǔ)了,自己畫都是小case,至于怎么用,好好想想吧!
5.專為移動平臺定制的表單元素
瀏覽器中出現(xiàn)的html5表單元素與對應(yīng)的鍵盤:
只需要簡單的聲明 input type=”email” 即可完成對不同樣式鍵盤的調(diào)用,簡捷方便。
設(shè)計師要知道,用的時候記得告訴研發(fā)同事一聲!
6.豐富的交互方式支持
提升互動能力:拖拽、撤銷歷史操作、文本選擇等
Transition – 組件的移動效果
Transform – 組件的變形效果
Animation – 將移動和變形加入動畫支持
設(shè)計師要知道,HTML5提供的交互方式是非常豐富的,至于用不用得上,那是你自己的事兒嘍!
7.HTML5使用上的優(yōu)勢
更低的開發(fā)及維護成本;
使頁面變得更小,減少了用戶不必要的支出;而且,性能更好使耗電量更低;
方便升級,打開即可使用最新版本,免去重新下載升級包的麻煩,使用過程中就直接更新了離線緩存。
設(shè)計師要知道,用戶想要什么,HTML5能提供給用戶什么。
8.CSS3 視覺設(shè)計師的輔助利器
CSS3支持了字體的嵌入、版面的排版,以及最令人印象深刻的動畫功能。
Selector – 更有彈性的選擇器
Webfonts – 嵌入式字體
Layout – 多樣化的排版選擇
Stlying radius gradient shadow – 圓角、漸變、陰影
Border background – 邊框的背景支持
使用CSS3來完成部分視覺工作,載入速度快,節(jié)省代碼及圖片,也為用戶節(jié)約了帶寬。
設(shè)計師要知道,一個界面里幾十張素材圖的方式已經(jīng)太out啦,趕快讓CSS3幫你偷懶。
9.實時通訊
以往網(wǎng)站由于HTTP協(xié)議以及瀏覽器的設(shè)計,實時的互動性相當(dāng)?shù)氖芟蓿荒苁褂靡恍┘记蓙怼阜抡妗箤崟r的通訊效果,但HTML5提供了完善的實時通訊支持。
設(shè)計師要知道,應(yīng)用中嵌入實時通信、信息內(nèi)容進(jìn)行實時提醒,HTML5可以幫你實現(xiàn)。
10.檔案以及硬件支持
不知道大家有沒有發(fā)現(xiàn),在Gmail等新的網(wǎng)頁程序當(dāng)中,已經(jīng)可以透過拖拉的方式將檔案作為郵件附件?這就是HTML5檔案的功能中的Drag’n Drop和File API。
設(shè)計師要知道,移動應(yīng)用中對于數(shù)據(jù)傳輸?shù)男枨笤絹碓酱螅瑐鹘y(tǒng)的路徑選擇方式太過于繁瑣,快來試試HTML5的拖拽上傳功能吧!
11.語意化
語意化的網(wǎng)絡(luò)是可以讓計算機能夠更加理解網(wǎng)頁的內(nèi)容,對于像是搜索引擎的優(yōu)化(SEO)或是推薦系統(tǒng)可以有很大的幫助。
設(shè)計師要知道,HTML5能讓搜索更快速、更準(zhǔn)確。
12.雙平臺融合的app開發(fā)方式,提高工作效率
依照目前iPhone/Android 迅速提升市占率的情勢來看,未來如果想要在先進(jìn)的智慧型手機上撰寫應(yīng)用程式,要不是選擇使用Objective-C + CocoaTouch Framework 撰寫iPhone/iPad 應(yīng)用程式,就是選擇Java + Android Framework 撰寫Android 應(yīng)用程式,如果想要同時支援兩種平臺,勢必要維護兩套程式碼,對于剛起步的小服務(wù)而言也算是個小有負(fù)擔(dān)的維運成本。
使用HTML5, CSS3 來撰寫Web-based 的應(yīng)用程式,若要同時支援iPhone 及Android,幾乎只需要維護一份程式碼(少部份要因應(yīng)clients 作修改),而且未來若有其它行動裝置擁有支援HTML5 的瀏覽器,那同樣的WebApp 直接就多了一個支援平臺。
Google 的系列服務(wù)使用了不少HTML5 中的cache、storage 及database 規(guī)格來做到離線存取程式的效果。因為比起桌面應(yīng)用程式,行動裝置的網(wǎng)路連線更不穩(wěn)定,而且有時在移動中并無網(wǎng)路可以使用,透過這些技術(shù)才能讓使用者即使在 無網(wǎng)路環(huán)境下繼續(xù)使用你的webapp。這說明html5主要服務(wù)對象還是給予web的應(yīng)用,并不會對全部app開發(fā)造成威脅,這樣有利于不同類型應(yīng)用使 用不同的開發(fā)方式,靈活性更強。
拖拽的過程就不說了,這里主要說一下如何在前端獲取到圖片的相關(guān)信息。
html5里有一個fileReader的全局變量,用來讀取本地文件,比如txt,img等,下面是一個簡單的代碼。
function?checkFile(files){
var?file?=?files[0];
var?reader?=?new?FileReader();
//?show表示div?id='show'/div,用來展示圖片預(yù)覽的
if(!/image\/\w+/.test(file.type)){
show.innerHTML?=?"請確保文件為圖像類型";
return?false;
}
//?onload是異步操作
reader.onload?=?function(e){
show.innerHTML?=?'img?src="'+e.target.result+'"?alt="img"';
}
reader.readAsDataURL(file);
}
這樣就能夠在不上傳到服務(wù)器的前提下預(yù)覽圖片。當(dāng)然,這個問題的重點是獲取圖片的原始尺寸,html5里還提供了兩個變量來獲取:naturalWidth和naturalHeight,這兩個分別來獲取圖片的原始寬度和原始高度。
在上面的例子中,就能通過下面的方式獲取到:
var?width?=?e.target.naturalWidth;
var?height?=?e.target.naturalHeight;
還有一種情況就是,如果已經(jīng)存在頁面里的圖片,怎么獲取到原始尺寸呢,可以這樣:
var?img?=?document.getElementsByTagName('img')[0];?//?獲取到圖片
var?width?=?img.naturalWidth;
var?height?=?img.naturalHeight;
網(wǎng)頁題目:html5拖拽上傳,拖拽上傳怎么弄
文章出自:http://chinadenli.net/article25/dsgedci.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、網(wǎng)站設(shè)計公司、網(wǎng)站維護、品牌網(wǎng)站建設(shè)、網(wǎng)站改版、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)