日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

HTML5拖放事件

發布時間:2024/3/12 HTML 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTML5拖放事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

拖放是在“拖放源”和“拖放目標”之間傳輸數據的用戶界面,它可以存在相同應用之間也可以是不同應用之間。
拖放源:任何有HTML draggable屬性的文檔元素都是拖放源,如下所示,每個li都是一個拖放源:

<ul id="list"><li draggable="true">A</li><li draggable="true">B</li><li draggable="true">C</li><li draggable="true">D</li> </ul> <div id="mark"></div> <!--注意:該處為后面講到的拖放目標-->

拖放源涉及到三個事件,如下

當用戶開始用鼠標在拖放源上拖到時,瀏覽器并沒有選擇元素內容,相反,它再這個元素上出發datastart事件,這個事件的處理程序就調用dataTransfer.setData()指定當前可用的拖放源數據。

當用戶在拖放開始和結束之間時,就會觸發drag事件
此處需要注意:很多同學會將drag事件和鼠標事件對比,會誤以為drag事件和mousemove事件效果一樣,其實不是這樣子的,drag事件是連續觸發,及時在短時間內沒有拖動,也會改變,但是mousemove當鼠標不移動時不會有變化。

當用戶拖放結束時,觸發dragend事件
如下所示,通過顏色變化來體現執行不同事件:

<script>window.onload=function(){var oUl=document.getElementById('list');var oLi=oUl.getElementsByTagName('li');var liLen=oLi.length;for(var i=0; i<liLen; i++){oLi[i].ondragstart=function(ev){ //給每個li添加dragstart事件var ev=window.event||ev;ev.dataTransfer.setData('name','1'); //調用dataTransfer.setData(),注意,在火狐瀏覽器中如果沒有調用的話,則drag事件不起作用ev.dataTransfer.effectAllowed='link'; //指定支持“移動”、“復制”、“鏈接”傳輸操作的幾種,可注意鼠標到拖放目標后的變化ev.dataTransfer.setDragImage(oMark,50,50); //指定拖放時的效果this.style.backgroundColor="green";}oLi[i].ondrag=function(){ //給每個li添加drag事件this.style.backgroundColor="red";}oLi[i].ondragend=function(){ //給每個li添加dragend事件this.style.backgroundColor="yellow";}}}</script>

拖放目標:任何文檔都可以是拖放目標,這不需要像拖放源一樣設置HTML屬性,只需要簡單的定義合適的事件即可。

拖放目標涉及到四個事件,拖放目標應可使用dataTransfer.types屬性確定拖放對象的可用數據是否是它能理解的格式。如下:

當拖放對象進入文檔元素時,瀏覽器在這個元素上觸發dragenter事件

當拖放對象在拖放目標中停留時觸發dragover事件

當用戶移動拖放離開拖放目標時,觸發dragleave事件
此處需要注意的是dragenter和dragleave事件會冒泡,入果拖放目標每部有嵌套元素,想知道dragleave事件表示拖放對象從拖放目標離開到目標外的事件還是到目標內的事件非常困難。

最后,如果用戶把拖放對象放置到拖放目標上時,在拖放目標上會觸發drop事件,需要注意的是,當dragover事件中禁止了默認事件后,drop事件才可以成功觸發,否則不可以。這個事件的處理程序應使用dataTransfer.getData()獲取傳輸數據并做一些適當的處理。

另外,如果用戶在拖放目標放置一或多個文件,dataTransfer.files屬性將是一個類數組的file對象。

oMark.ondragenter=function(ev){ //給拖放目標添加dragenter事件var ev=window.event||ev;this.style.backgroundColor="green"; } oMark.ondragover=function(ev){ //給拖放目標添加dragover事件var ev=window.event||ev;ev.preventDefault(); //阻止默認事件this.style.backgroundColor="pink"; } oMark.ondragleave=function(){ //給拖放目標添加dragleave事件this.style.backgroundColor="orange";} oMark.ondrop=function(ev){ //給拖放目標添加drop事件this.style.backgroundColor="black";if(ev.dataTransfer.types=="name"){ //使用dataTransfer.types屬性確定拖放對象的可用數據是否是它能理解的格式,此處為setData()中設置的key值alert(true);}}

下面是整個例子:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>drag</title><style>#list li{border:1px solid #000;width:100px;height:20px;background-color:yellow;margin-bottom:10px;list-style:none;text-align:center;}#mark{width:200px;height:200px;border:1px solid #000;background-color:red;margin-left:300px;margin-top:300px;}</style> </head> <body><ul id="list"><li draggable="true">A</li><li draggable="true">B</li><li draggable="true">C</li><li draggable="true">D</li></ul><div id="mark"></div><script>window.onload=function(){var oUl=document.getElementById('list');var oLi=oUl.getElementsByTagName('li');var oMark=document.getElementById('mark');var liLen=oLi.length;for(var i=0; i<liLen; i++){oLi[i].ondragstart=function(ev){var ev=window.event||ev;ev.dataTransfer.setData('name','1');ev.dataTransfer.effectAllowed='link';ev.dataTransfer.setDragImage(oMark,50,50);this.style.backgroundColor="green";}oLi[i].ondrag=function(){//this.style.backgroundColor="red";}oLi[i].ondragend=function(){this.style.backgroundColor="yellow";}}oMark.ondragenter=function(ev){var ev=window.event||ev;this.style.backgroundColor="green";}oMark.ondragover=function(ev){var ev=window.event||ev;ev.preventDefault();this.style.backgroundColor="pink";}oMark.ondragleave=function(){this.style.backgroundColor="orange";}oMark.ondrop=function(ev){this.style.backgroundColor="black";if(ev.dataTransfer.types=="name"){alert(true);}}}</script> </body> </html>

總結

以上是生活随笔為你收集整理的HTML5拖放事件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。