久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

HTML5拖放API實現拖放排序的實例代碼

HTML5 中提供了直接拖放的 API,極大的方便我們實現拖放效果,不需要去寫一大堆的 js,只需要通過監聽元素的拖放事件就能實現各種拖放功能。

前言

HTML5 中提供了直接拖放的 API,極大的方便我們實現拖放效果,不需要去寫一大堆的 js,只需要通過監聽元素的拖放事件就能實現各種拖放功能。

想要拖放某個元素,必須設置該元素的 draggable 屬性為 true,當該屬性為 false 時,將不允許拖放。而 img 元素和 a 元素都默認設置了 draggable 屬性為 true,可直接拖放,如果不想拖放這兩個元素,把屬性設為 false 即可。

拖放事件

拖放事件由不同的元素產生。一個元素被拖放,他可能會經過很多個元素上,最終到達想要放置的元素內。這里,我暫時把被拖放的元素稱為源對象,被經過的元素稱為過程對象,到達的元素我稱為目標對象。不同的對象產生不同的拖放事件。

源對象:

  1. dragstart:源對象開始拖放。
  2. drag:源對象拖放過程中。
  3. dragend:源對象拖放結束。

過程對象:

  1. dragenter:源對象開始進入過程對象范圍內。
  2. dragover:源對象在過程對象范圍內移動。
  3. dragleave:源對象離開過程對象的范圍。

目標對象:

  1. drop:源對象被拖放到目標對象內。
<div id="source" draggable="true">a元素</div>
<div id="process">b元素</div>
<div id="target">c元素</div>

<script>
    var source = document.getElementById('source'),     // a元素
        process = document.getElementById('process'),   // b元素
        target = document.getElementById('target');     // c元素
    
    source.addEventListener('dragstart',function(ev){   // dragstart事件由a元素產生
        console.log('a元素開始被拖動');
    },false)

    process.addEventListener('dragenter',function(ev){  // dragenter事件由b元素產生
        console.log('a元素開始進入b元素');
    },false)
    process.addEventListener('dragleave',function(ev){  // dragleave事件由b元素產生
        console.log('a元素離開b元素');
    },false)

    target.addEventListener('drop',function(ev){        // drop事件由c元素產生
        console.log('a元素拖放到c元素了');
        ev.preventDefault();
    },false)
    document.ondragover = function(e){e.preventDefault();}
</script>

dataTransfer 對象

在所有拖放事件中提供了一個數據傳遞對象 dataTransfer,用于在源對象和目標對象間傳遞數據。接下來認識一下這個對象的方法和屬性,來了解它是如何傳遞數據的。

setData()

該方法向 dataTransfer 對象中存入數據。接收兩個參數,第一個表示要存入數據種類的字符串,現在支持有以下幾種:

  1. text/plain:文本文字。
  2. text/html:HTML文字。
  3. text/xml:XML文字。
  4. text/uri-list:URL列表,每個URL為一行。

第二個參數為要存入的數據。例如:

event.dataTransfer.setData('text/plain','Hello World');

getData()

該方法從 dataTransfer 對象中讀取數據。參數為在 setData 中指定的數據種類。例如:

event.dataTransfer.getData('text/plain');

clearData()

該方法清除 dataTransfer 對象中存放的數據。參數可選,為數據種類。若參數為空,則清空所有種類的數據。例如:

event.dataTransfer.clearData();

setDragImage()

該方法通過用img元素來設置拖放圖標。接收三個參數,第一個為圖標元素,第二個為圖標元素離鼠標指針的X軸位移量,第三個為圖標元素離鼠標指針的Y軸位移量。例如:

var source = document.getElementById('source'),
    icon = document.createElement('img');

icon.src = 'img.png';

source.addEventListener('dragstart',function(ev){
    ev.dataTransfer.setDragImage(icon,-10,-10)
},false)

effectAllowed 和 dropEffect 屬性

這兩個屬性結合起來設置拖放的視覺效果。

值得注意的是:IE 不支持 dataTransfer 對象。對,不管哪個 IE 版本都不支持。

實現拖放排序

上面已經熟悉了拖放 API 的使用,我們來實現個簡單的拖放排序,這也是在項目中比較常見的。先來理一下思路:

  1. 在一個列表中,每個元素都可以被拖放,那首先要給每個元素設置 draggable 屬性為 true。
  2. 監聽每個元素的 dragstart 事件,對源對象做樣式處理來區分。
  3. 監聽每個元素的 dragenter 事件,當源對象進入到當前元素里,就把源對象添加到該元素之前。這樣子后面的元素就會被源對象擠下去了,實現了排序的效果。
  4. 但是會發現,源對象無法排到最后一個去,只能在倒數第二。這時就要監聽 dragleave 事件,當過程對象是最后一個元素時,源對象離開了過程對象,這時就把源對象添加到最后去。
【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要介紹了有關HTML5頁面在iPhoneX適配問題,需要的朋友可以參考下
本篇文章主要介紹了html5中canvas圖表實現柱狀圖的示例,本文使用canvas來實現一個圖表,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
Adobe公司出品的多媒體處理軟件產品線較多,涵蓋了音視頻編輯、圖像處理、平面設計、影視后期等領域。這篇文章主要介紹了Adobe Html5 Extension開發初體驗圖文教程,非常不錯,需要的朋
這篇文章主要介紹了基于HTML5的WebGL經典3D虛擬機房漫游動畫,需要的朋友可以參考下
這篇文章主要介紹了html5實現移動端適配完美寫法,需要的朋友可以參考下
本篇文章主要介紹了HTML5響應式(自適應)網頁設計的實現,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
主站蜘蛛池模板: 一区二区国产在线 | 日韩视频在线一区 | 国产成人免费视频网站高清观看视频 | 亚洲一区不卡 | 网站黄色在线免费观看 | 在线观看亚洲欧美 | 亚洲一区视频在线 | 国产高清视频在线观看播放 | 激情av免费看| 久久黄色 | 交专区videossex农村 | 久久一二区 | 欧美日韩亚洲系列 | 国产91丝袜在线播放 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 久久婷婷国产香蕉 | a在线视频 | 日韩一区二区三区在线观看视频 | 中文字幕人成乱码在线观看 | 午夜影院在线观看免费 | 黄色高清视频 | 久久精品久久久 | 亚洲国产网站 | 久久99精品久久久久久狂牛 | 色综合一区 | 久久精品国产亚洲一区二区三区 | 国产一区二区三区 | 一区二区亚洲 | 亚洲精品久久久久中文字幕二区 | 国产精品久久久久久久久图文区 | 欧美日韩综合精品 | 免费观看一级毛片视频 | h视频在线播放 | 欧美日本一区 | 久久久国产一区二区三区 | 一级黄a视频| 黄免费观看视频 | 日韩免费激情视频 | 久久久日韩精品一区二区三区 | 午夜电影网 | 一级片免费网站 |