中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

突襲HTML5之Javascript API擴展4—拖拽(Drag/Drop)概述
來源:易賢網 閱讀:1987 次 日期:2016-07-22 14:47:48
溫馨提示:易賢網小編為您整理了“突襲HTML5之Javascript API擴展4—拖拽(Drag/Drop)概述”,方便廣大網友查閱!

拖拽(Drag/Drop)是個非常普遍的功能。你可以抓住一個對象,并且拖動到你想放置的區域。很多javascript都類似實現了相關的功能,例如,jQueryUI的draganddrop組件。在HTML5中,拖拽(draganddrop)成為了標準操作,任何元素都支持。正因為這個功能太普遍了,所有的主流瀏覽器都支持這個操作。

啟用拖拽-draggable屬性

非常簡單,只需要將一個元素的拖動屬性修改為draggable,這個元素就支持拖動了,如下所示:

代碼如下:

<imgdraggable="true"/>

拖動中數據的傳遞

拖動的過程中,我們往往需要傳遞相應的邏輯數據來完成轉換的過程,這里主要是使用dataTransfer對象進行數據傳遞,下面先看看它的成員:

方法成員:

代碼如下:

setData(format,data):把被拖動的數據賦值給dataTransfer對象。

format:一個String型參數,指定被拖動數據的類型。該參數取值可以是“Text”(文本類型)和“URL”(URL類型)。該參數是大小寫無關的,所以傳入"text"與"Text"是一樣的。

data:一個變體類型參數,指定被拖動的數據。該數據可以是文本,圖片路徑,URL等等。

該函數有Boolean類型的返回值,true表示數據成功加到dataTransfer中,false代表不成功。如果需要,可以通過這個參數來決定是否應該繼續執行某些邏輯。

代碼如下:

getData(format):獲取dataTransfer中存放的拖動數據。

format意義與setData中的一樣,取值可以是"Text"(文本類型)和"URL"(URL類型)。

代碼如下:

clearData(format):移除指定類型的數據。

這里的format除了上面可以指定的"Text"(文本類型)和"URL"(URL類型)外,還可以取下列值:file-文件,html-html元素,image-圖片。

這個方法可以用于去選擇性的處理拖動的數據類型。

屬性成員:

代碼如下:

effectAllowed:設置或獲取數據源元素中的數據可以執行的操作。

屬性類型為字符串,取值范圍如下:

"copy"-復制數據.

"link"-鏈接數據.

"move"-移動數據

"copyLink"-復制或鏈接數據,由目標對象來確定。

"copyMove"-復制或移動數據,由目標對象來確定。

"linkMove"-鏈接或移動數據,由目標對象來確定。

"all"-所有的操作都是支持的。

"none"-禁止拖動。

"uninitialized"-默認值,采用默認的行為。

注意設置effectAllowed為none以后,拖動是禁止的,但是鼠標形狀還是顯示沒有可拖動的對象的形狀,如果想不顯示這個鼠標形狀,則需要將window的event事件的屬性returnValue設置為false。

代碼如下:

dropEffect:設置或獲取拖動的目標上允許的操作以及相關的鼠標形狀。

屬性類型為字符串,取值范圍如下:

"copy"-鼠標顯示為復制時的形狀;

"link"-鼠標顯示為連接的形狀;

"move"-鼠標顯示為移動的形狀。

"none"(默認值)-鼠標顯示為沒有拖動的形狀。

effectAllowed指定了數據源支持的操作,所以通常在ondragstart事件中指定。dropEffect指定了拖動放置的目標支持的操作,所以與effectAllowed配合,通常在拖動的目標上的ondragenter,ondragover和ondrop等事件中使用。

代碼如下:

files:返回拖動的文件的列表FileList。

types:ondragstart中發送的數據(被拖動的數據)類型的列表。

dataTransfer對象的存在,使得在拖動的數據源和目標元素之間傳遞邏輯數據變成了可能。通常我們使用setData方法在數據源元素的ondragstart事件中提供數據,然后再目標元素中,使用getData方法獲取數據。

拖動中觸發的事件

下面是一次拖拽會發生的事件,基本上事件的觸發順序也就是下面的順序:

代碼如下:

dragstart:要被拖拽的元素開始拖拽時觸發,這個事件對象是被拖拽元素。

drag:拖拽元素時觸發,這個事件對象是被拖拽元素。

dragenter:拖拽元素進入目標元素時觸發,這個事件對象是目標元素。

dragover:拖拽某元素在目標元素上移動時觸發,這個事件對象是目標元素。

dragleave:拖拽某元素離開目標元素時觸發,這個事件對象是目標元素。

drop:將被拖拽元素放在目標元素內時觸發,這個事件對象是目標元素。

dragend:在drop之后觸發,就是拖拽完畢時觸發,這個事件對象是被拖拽元素。

基本上事件的參數event都會傳入相關的元素,可以很方便的進行一些修改。這里,我們并不需要處理每個事件,通常只需要掛接主要的幾個事件即可。

拖動開始-ondragstart事件

從這個事件傳入的參數含有的信息非常豐富,從中可以很方便的獲取到被拖動的元素(event.Target);從中可以設置被拖動數據(event.dataTransfer.setData);所以你可以很方便實現拖動的背后邏輯(當然你綁定的時候也可以傳遞其他的參數)。

拖動過程中-ondrag,ondragover,ondragenter和ondragleave事件

ondrag事件的對象是被拖拽元素,通常這個事件處理的比較少。ondragenter事件是當拖動進入當前元素時發生,ondragleave事件是在當拖動離開當前元素時發生,ondragover事件是在拖動在當前元素中移動時發生。

這里只需要注意一點,因為默認情況下,瀏覽器是禁止元素drop的,所以為了讓元素可以drop,需要在這個函數中返回false或者調用event.preventDefault()方法。如下面的例子所示。

拖動結束-ondrop,ondragend事件

當可拖動的數據被drop的時候,drop事件觸發。drop結束后,dragend事件被觸發,這個事件使用的也相對少一點。

看一個簡單的例子:

代碼如下:

<!DOCTYPEHTML>

<html>

<head>

<scripttype="text/javascript">

functionallowDrop(ev){

ev.preventDefault();

}

functiondrag(ev){

ev.dataTransfer.setData("Text",ev.target.id);

}

functiondrop(ev){

vardata=ev.dataTransfer.getData("Text");

ev.target.appendChild(document.getElementById(data));

ev.preventDefault();

}

</script>

</head>

<body>

<divid="div1"ondrop="drop(event)"ondragover="allowDrop(event)"></div>

<imgid="drag1"src="img_logo.gif"draggable="true"ondragstart="drag(event)"width="336"height="69"/>

</body>

</html>

文件拖拽

上面的例子已經使用了dataTransfer的各種方法和屬性,下面再看網上的另外一個有趣的應用:拖拽一個圖片到網頁上,然后在網頁上顯示。這個應用用到了dataTransfer的files屬性。

代碼如下:

<!DOCTYPEHTML>

<html>

<head>

<metacharset="utf-8">

<title>HTML5拖放文件</title>

<style>

#section{font-family:"Georgia","微軟雅黑","華文中宋";}

.container{display:inline-block;min-height:200px;min-width:360px;color:#f30;padding:30px;border:3pxsolid#ddd;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;}

.preview{max-width:360px;}

#files-list{position:absolute;top:0;left:500px;}

#list{width:460px;}

#list.preview{max-width:250px;}

#listp{color:#888;font-size:12px;}

#list.green{color:#09c;}

</style>

</head>

<body>

<divid="section">

<p>把你的圖片拖到下面的容器內:</p>

<divid="container"class="container">

</div>

<divid="files-list">

<p>已經拖進過來的文件:</p>

<ulid="list"></ul>

</div>

</div>

<script>

if(window.FileReader){

varlist=document.getElementById('list'),

cnt=document.getElementById('container');

//判斷是否圖片

functionisImage(type){

switch(type){

case'image/jpeg':

case'image/png':

case'image/gif':

case'image/bmp':

case'image/jpg':

returntrue;

default:

returnfalse;

}

}

//處理拖放文件列表

functionhandleFileSelect(evt){

evt.stopPropagation();

evt.preventDefault();

varfiles=evt.dataTransfer.files;

for(vari=0,f;f=files[i];i++){

vart=f.type?f.type:'n/a',

reader=newFileReader(),

looks=function(f,img){

list.innerHTML+='<li><strong>'+f.name+'</strong>('+t+

')-'+f.size+'bytes<p>'+img+'</p></li>';

cnt.innerHTML=img;

},

isImg=isImage(t),

img;

//處理得到的圖片

if(isImg){

reader.onload=(function(theFile){

returnfunction(e){

img='<imgclass="preview"src="'+e.target.result+'"title="'+theFile.name+'"/>';

looks(theFile,img);

};

})(f)

reader.readAsDataURL(f);

}else{

img='"o((>ω<))o",你傳進來的不是圖片!!';

looks(f,img);

}

}

}

//處理插入拖出效果

functionhandleDragEnter(evt){this.setAttribute('style','border-style:dashed;');}

functionhandleDragLeave(evt){this.setAttribute('style','');}

//處理文件拖入事件,防止瀏覽器默認事件帶來的重定向

functionhandleDragOver(evt){

evt.stopPropagation();

evt.preventDefault();

}

cnt.addEventListener('dragenter',handleDragEnter,false);

cnt.addEventListener('dragover',handleDragOver,false);

cnt.addEventListener('drop',handleFileSelect,false);

cnt.addEventListener('dragleave',handleDragLeave,false);

}else{

document.getElementById('section').innerHTML='你的瀏覽器不支持啊,同學';

}

</script>

</body>

</html>

這個例子中使用了html5中的文件讀取API:FileReader對象;該對象提供了下列異步方法用于讀取文件:

1.FileReader.readAsBinaryString(fileBlob)

以二進制的方式讀取文件,result屬性會包含一個文件的二進制的格式

2.FileReader.readAsText(fileBlob,opt_encoding)

以文本的方式讀取文件,result屬性將會包含一個文件的文本格式,默認解碼參數是“utf-8”。

3.FileReader.readAsDataURL(file)

以URL形式讀取文件result將會包含一個文件的DataURL格式(圖片通常用這種方式)。

當使用上面的方法讀取文件后,會觸發下列事件:

代碼如下:

onloadstart,onprogress,onabort,onerror,onload,onloadend

這些事件都很簡單,需要的時候掛接就可以了。看下面的代碼示例:

代碼如下:

functionstartRead(){

//obtaininputelementthroughDOM

varfile=document.getElementById('file').files[0];

if(file){

getAsText(file);

}

}

functiongetAsText(readFile){

varreader=newFileReader();

//ReadfileintomemoryasUTF-16

reader.readAsText(readFile,"UTF-16");

//Handleprogress,success,anderrors

reader.onprogress=updateProgress;

reader.onload=loaded;

reader.onerror=errorHandler;

}

functionupdateProgress(evt){

if(evt.lengthComputable){

//evt.loadedandevt.totalareProgressEventproperties

varloaded=(evt.loaded/evt.total);

if(loaded<1){

//Increasetheprogbarlength

//style.width=(loaded*200)+"px";

}

}

}

functionloaded(evt){

//Obtainthereadfiledata

varfileString=evt.target.result;

//HandleUTF-16filedump

if(utils.regexp.isChinese(fileString)){

//ChineseCharacters+Namevalidation

}

else{

//runothercharsettest

}

//xhr.send(fileString)

}

functionerrorHandler(evt){

if(evt.target.error.name=="NotReadableErr"){

//Thefilecouldnotberead

}

}

這里也簡單說一下:普通的文件下載使用的就是window.open方法,例如:

代碼如下:

window.open('http://aaa.bbbb.com/ccc.rar','_blank')

更多信息請查看網頁制作
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
国产精品久久九九| 欧美日韩视频在线| 亚洲精品欧美日韩专区| 欲色影视综合吧| 亚洲毛片网站| 久久精品中文| 欧美三级中文字幕在线观看| 国产日韩欧美在线播放| 亚洲三级免费电影| 久久福利精品| 国产精品国产三级国产专播品爱网| 国产视频一区在线观看| 亚洲日本在线观看| 久久综合久久美利坚合众国| 国产精品高清免费在线观看| 亚洲国产精品t66y| 欧美在线精品一区| 国产精品三级视频| 一区二区三区久久| 欧美另类高清视频在线| 在线观看亚洲| 久久久久久成人| 国产欧美一级| 香蕉免费一区二区三区在线观看 | 免费的成人av| 国产麻豆精品theporn| 一区二区高清视频| 欧美激情第三页| 亚洲国产cao| 久久国产视频网| 国产乱人伦精品一区二区| 一区二区三区.www| 国产精品国产三级国产专播品爱网| 99国产精品99久久久久久| 欧美精品1区2区3区| 亚洲激情在线播放| 欧美刺激性大交免费视频| 亚洲国产精品久久| 蜜桃伊人久久| 亚洲国产日韩欧美在线99| 另类av一区二区| 亚洲人成欧美中文字幕| 欧美电影在线观看| av成人福利| 国产精品综合| 美女91精品| 一区二区三区四区五区精品视频 | 免费看的黄色欧美网站| 在线精品视频一区二区三四| 麻豆久久精品| 一区二区欧美精品| 国产日韩欧美| 欧美国产第一页| 亚洲女性裸体视频| 影音先锋欧美精品| 欧美视频一区在线| 久久九九精品| 一本色道久久综合亚洲精品婷婷| 国产精品一区久久久| 久久先锋资源| 亚洲桃花岛网站| 1000部国产精品成人观看| 欧美三区在线| 美女精品在线观看| 亚洲一区自拍| 亚洲人成人77777线观看| 国产精品丝袜白浆摸在线| 蜜桃久久精品一区二区| 亚洲男人的天堂在线| 亚洲欧洲一区二区在线观看| 国产无一区二区| 欧美日韩视频在线第一区| 久久亚洲一区二区三区四区| 亚洲图片自拍偷拍| 亚洲第一天堂av| 国产一区二区三区观看 | 亚洲国产专区校园欧美| 国产精品videossex久久发布| 久久精品国产96久久久香蕉| 亚洲免费观看高清完整版在线观看| 国产精品网站视频| 欧美精品18| 免费一区视频| 美女国产精品| 久久天天狠狠| 久久久久欧美精品| 欧美一区二区视频在线| 亚洲一区久久久| 亚洲免费观看在线观看| 91久久国产精品91久久性色| 国内精品伊人久久久久av一坑| 国产精品亚洲产品| 欧美午夜不卡影院在线观看完整版免费| 美女成人午夜| 久久一区精品| 久久免费黄色| 浪潮色综合久久天堂| 久久久激情视频| 久久久精彩视频| 欧美在线免费视频| 久久国内精品自在自线400部| 亚洲综合色丁香婷婷六月图片| 亚洲理论电影网| 最新精品在线| 99精品99久久久久久宅男| 亚洲美女av电影| 一区二区高清视频在线观看| 中日韩高清电影网| 亚洲私人影院在线观看| 亚洲视频精品在线| 亚洲欧美区自拍先锋| 午夜国产精品视频| 久久成人久久爱| 噜噜噜久久亚洲精品国产品小说| 美国十次成人| 欧美视频在线免费看| 国产精品视频一区二区高潮| 国产视频丨精品|在线观看| 激情丁香综合| 亚洲伦理中文字幕| 亚洲在线成人精品| 久久久久久久网| 欧美久久久久免费| 国产精品婷婷午夜在线观看| 狠色狠色综合久久| 日韩亚洲不卡在线| 欧美一区二区在线看| 免费亚洲电影| 国产精品美女久久久免费| 国产一区二区日韩| 亚洲人成在线观看网站高清| 一本一本久久a久久精品综合麻豆| 亚洲在线中文字幕| 久久精品亚洲一区二区三区浴池| 欧美69视频| 国产女精品视频网站免费| 亚洲第一色中文字幕| 亚洲一区二区三区免费在线观看| 久久精品视频99| 久久久久久久国产| 欧美亚洲三区| 亚洲视频www| 国产亚洲精品bv在线观看| 久久亚洲精品一区二区| 宅男66日本亚洲欧美视频| 性做久久久久久久久| 99视频精品全国免费| 欧美亚州在线观看| 国产欧美日韩伦理| 亚洲精品欧美日韩专区| 国产精品亚洲综合色区韩国| 一区二区三区在线视频播放| 亚洲国产欧美一区二区三区久久 | 一本色道久久综合亚洲91| 国产精品亚洲一区| 国语自产精品视频在线看| 欧美高清一区| 欧美日韩高清在线观看| 国产精品第一区| 国产情人节一区| 精品va天堂亚洲国产| 亚洲精品视频啊美女在线直播| 亚洲欧美中文日韩在线| 欧美日韩一级黄| 亚洲高清影视| 亚洲在线一区| 在线一区二区日韩| 欧美亚州韩日在线看免费版国语版| 亚洲最新中文字幕| 亚洲国产精品激情在线观看| 欧美高清一区二区| 黑人一区二区| 好吊色欧美一区二区三区四区 | 亚洲作爱视频| 欧美va亚洲va国产综合| 影音先锋中文字幕一区二区| 欧美在线影院在线视频| 国产免费一区二区三区香蕉精| 亚洲视频在线观看视频| 欧美欧美天天天天操| 亚洲精品影视| 欧美日韩精品国产| 99精品国产一区二区青青牛奶| 欧美激情一区二区三区在线视频观看| 亚洲国产精品精华液网站| 欧美成人午夜激情在线| 亚洲精品一区二区三区蜜桃久| 欧美激情一区二区三区在线| 亚洲毛片在线看| 国产精品久久久一区麻豆最新章节 | 亚洲一区精品在线| 欧美大色视频| 日韩视频中文字幕| 欧美日韩免费网站| 9色国产精品| 国产欧美欧美| 久久视频一区二区| 亚洲美女一区| 国产免费亚洲高清| 久久青草久久|