婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > HTML5拖放API實現拖放排序的實例代碼

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

熱門標簽:貸款電銷人工和機器人哪個好 電話機器人如何 飛亞外呼系統 百應電銷機器人產業 電視購物電銷外呼系統 杭州營銷電銷機器人供應商 聯通400電話申請 西寧智能外呼系統加盟 高德地圖標注賓館位置

前言

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 事件,當過程對象是最后一個元素時,源對象離開了過程對象,這時就把源對象添加到最后去。

主要代碼如下:

var source = document.querySelectorAll('.list'),
    dragElement = null;

for(var i = 0; i < source.length; i++){
    source[i].addEventListener('dragstart',function(ev){
        dragElement = this;
    },false);

    source[i].addEventListener('dragenter', function(ev){
        if(dragElement != this){
            this.parentNode.insertBefore(dragElement,this);
        }
    }, false)

    source[i].addEventListener('dragleave', function(ev){
        if(dragElement != this){
            if(this == this.parentNode.lastElementChild || this == this.parentNode.lastChild){
                this.parentNode.appendChild(dragElement);
            }
        }
    }, false)
};

document.ondragover = function(e){e.preventDefault();}
document.ondrop = function(e){e.preventDefault();}

完整的代碼地址:drag-demo 

兼容

主要是在IE中的兼容不太好,不過至少在IE10中能兼容上面的拖動排序。

而且在我簡單的試驗中發現,就是在 IE 中元素不設置 height 的時候,不會觸發 dragleave 事件。

更重要的一點是在 ios 和安卓上,完全不兼容。不過還好,有一個插件能讓它在移動端完美兼容。  

插件地址:ios-html5-drag-drop-shim    

只需要在原有的代碼中引入該插件,即可在移動端上實現拖動了。

<script>
var iosDragDropShim = { enableEnterLeave: true }
</script>
<script src="vendor/ios-drag-drop.js"></script>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:晉中 煙臺 牡丹江 安慶 內蒙古 邯鄲 撫州 玉溪

巨人網絡通訊聲明:本文標題《HTML5拖放API實現拖放排序的實例代碼》,本文關鍵詞  HTML5,拖放,API,實現,排序,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《HTML5拖放API實現拖放排序的實例代碼》相關的同類信息!
  • 本頁收集關于HTML5拖放API實現拖放排序的實例代碼的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    不卡的av电影在线观看| 在线视频国内一区二区| 国产揄拍国内精品对白| 51精品秘密在线观看| 亚洲成人777| 日韩精品专区在线影院观看| 久久激情五月激情| 26uuu久久综合| 国精品**一区二区三区在线蜜桃| 久久久影视传媒| 国产91在线观看丝袜| 成人免费一区二区三区视频| 欧美在线免费观看视频| 欧美a级理论片| 久久久久久久久一| www.成人网.com| 亚洲电影在线免费观看| 日韩精品一区二区三区视频在线观看 | 国产伦理精品不卡| 亚洲国产岛国毛片在线| 欧美影院一区二区三区| 蜜臀a∨国产成人精品| 国产亚洲短视频| 欧美自拍丝袜亚洲| 激情综合色播激情啊| 中文字幕中文在线不卡住| 欧美男人的天堂一二区| 国产mv日韩mv欧美| 亚洲一二三四久久| 久久综合久久综合亚洲| 色综合天天综合网天天狠天天| 麻豆视频观看网址久久| 亚洲乱码一区二区三区在线观看| 日韩精品专区在线影院观看 | 51午夜精品国产| 精品视频一区三区九区| 亚洲一区二区av电影| 久久免费视频色| 欧美日韩一区二区三区免费看| 国产在线精品免费| 亚洲一区二区三区在线| 国产精品传媒在线| 日韩写真欧美这视频| 91黄色免费看| 成人激情文学综合网| 狠狠色丁香婷综合久久| 亚洲一区国产视频| 国产精品视频第一区| 欧美va亚洲va国产综合| 欧美性一二三区| 99久久亚洲一区二区三区青草| 精品无人码麻豆乱码1区2区| 日本aⅴ精品一区二区三区| 一区二区三区色| 亚洲欧洲日韩一区二区三区| 久久亚洲综合色一区二区三区 | 亚洲精品国产一区二区精华液 | 免费成人av在线| 亚洲狠狠爱一区二区三区| 国产精品久久久久久久裸模| 精品欧美一区二区三区精品久久| 欧美一卡二卡三卡四卡| 欧美色图天堂网| 欧美伊人精品成人久久综合97| 91同城在线观看| 色婷婷精品大视频在线蜜桃视频| 不卡一区在线观看| 91免费观看视频在线| 色婷婷精品久久二区二区蜜臂av | 久久精品亚洲麻豆av一区二区| 91一区二区在线| 91久久国产最好的精华液| 91在线观看成人| 欧美视频在线一区| 91精品久久久久久久99蜜桃| 欧美一区二区三区公司| 久久综合999| 国产精品久久久久久久久果冻传媒 | 亚洲欧美国产77777| 日韩中文字幕亚洲一区二区va在线| 天堂在线一区二区| 在线亚洲一区二区| jizzjizzjizz欧美| 午夜精品成人在线视频| 三级不卡在线观看| 国精品**一区二区三区在线蜜桃| 国产成人免费视频精品含羞草妖精| 成人一道本在线| 色噜噜狠狠色综合欧洲selulu| 欧美日本一区二区三区四区| 欧美大胆一级视频| 国产精品国产成人国产三级| 亚洲国产乱码最新视频| 看国产成人h片视频| av网站一区二区三区| 91麻豆精品91久久久久同性| 久久久天堂av| 午夜视频一区在线观看| 成人小视频在线观看| 欧美在线观看禁18| 久久综合国产精品| 亚洲一区二区精品视频| 国产在线国偷精品免费看| 欧美网站一区二区| 久久精品视频在线看| 亚洲男人天堂av| 国内精品伊人久久久久av一坑| 麻豆91免费观看| 91免费看`日韩一区二区| 亚洲国产成人精品视频| 欧美久久久久久久久| 福利一区福利二区| 欧美色爱综合网| 综合分类小说区另类春色亚洲小说欧美| 国产三级久久久| 久久99热国产| 欧美福利电影网| 又紧又大又爽精品一区二区| 国产一区二区视频在线| 7777精品伊人久久久大香线蕉的 | 久久综合九色综合久久久精品综合| 亚洲精品高清在线| eeuss鲁一区二区三区| 久久久久久久久久看片| 美国欧美日韩国产在线播放| 欧美视频在线播放| 亚洲乱码中文字幕| 成人美女视频在线观看| 久久久久国产一区二区三区四区 | 精品一区二区三区视频在线观看| 一本一本大道香蕉久在线精品 | 不卡一卡二卡三乱码免费网站| 日韩精品自拍偷拍| 蜜臀av性久久久久蜜臀aⅴ流畅 | 懂色av一区二区三区蜜臀| 欧美成人伊人久久综合网| 三级亚洲高清视频| 欧美男男青年gay1069videost| 亚洲成人av资源| 欧美亚洲高清一区| 亚洲午夜精品久久久久久久久| 91片在线免费观看| 亚洲精品欧美二区三区中文字幕| 91精品办公室少妇高潮对白| 亚洲mv大片欧洲mv大片精品| 91精品国产综合久久久久久| 日本亚洲一区二区| 欧美一区二区观看视频| 精品一区二区三区蜜桃| 久久久亚洲精华液精华液精华液 | 欧美在线免费播放| 婷婷综合五月天| 91精品国产综合久久久久久久| 免费成人小视频| 久久精品水蜜桃av综合天堂| 97久久超碰精品国产| 亚洲高清久久久| 久久久久久久一区| 成人免费毛片aaaaa**| 曰韩精品一区二区| 91精品国产综合久久久久久久| 久久er精品视频| |精品福利一区二区三区| 欧美日高清视频| 丁香一区二区三区| 日韩成人精品在线观看| 国产精品电影院| 欧美一级片在线看| 成人免费电影视频| 亚洲va在线va天堂| 国产亚洲一区二区三区四区| www.成人网.com| 麻豆91精品91久久久的内涵| 国产精品日韩成人| 7777精品伊人久久久大香线蕉的| 成人福利视频网站| 日本欧美肥老太交大片| 国产欧美视频在线观看| 欧美日韩亚洲高清一区二区| 国产黄色精品网站| 麻豆高清免费国产一区| 亚洲黄色免费电影| 日本一区二区三区电影| 欧美成人福利视频| 欧美主播一区二区三区美女| 国产91精品露脸国语对白| 日韩av一级电影| 亚洲va韩国va欧美va精品| 亚洲啪啪综合av一区二区三区| 精品久久久久久久久久久院品网| 欧美三级蜜桃2在线观看| 91一区二区三区在线播放| 国产黄色91视频| 极品尤物av久久免费看| 丝袜国产日韩另类美女| 亚洲精选在线视频| 亚洲视频在线一区二区| 国产女人aaa级久久久级| 久久人人97超碰com| 日韩三级中文字幕|