校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > HTML5拖放API實現(xiàn)拖放排序的實例代碼

HTML5拖放API實現(xiàn)拖放排序的實例代碼

熱門標(biāo)簽:貸款電銷人工和機器人哪個好 電話機器人如何 飛亞外呼系統(tǒng) 百應(yīng)電銷機器人產(chǎn)業(yè) 電視購物電銷外呼系統(tǒng) 杭州營銷電銷機器人供應(yīng)商 聯(lián)通400電話申請 西寧智能外呼系統(tǒng)加盟 高德地圖標(biāo)注賓館位置

前言

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

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

拖放事件

拖放事件由不同的元素產(chǎn)生。一個元素被拖放,他可能會經(jīng)過很多個元素上,最終到達想要放置的元素內(nèi)。這里,我暫時把被拖放的元素稱為源對象,被經(jīng)過的元素稱為過程對象,到達的元素我稱為目標(biāo)對象。不同的對象產(chǎn)生不同的拖放事件。

源對象:

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

過程對象:

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

目標(biāo)對象:

  1. drop:源對象被拖放到目標(biāo)對象內(nèi)。
<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元素產(chǎn)生
        console.log('a元素開始被拖動');
    },false)

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

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

dataTransfer 對象

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

setData()

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

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

第二個參數(shù)為要存入的數(shù)據(jù)。例如:

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

getData()

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

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

clearData()

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

event.dataTransfer.clearData();

setDragImage()

該方法通過用img元素來設(shè)置拖放圖標(biāo)。接收三個參數(shù),第一個為圖標(biāo)元素,第二個為圖標(biāo)元素離鼠標(biāo)指針的X軸位移量,第三個為圖標(biāo)元素離鼠標(biāo)指針的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 屬性

這兩個屬性結(jié)合起來設(shè)置拖放的視覺效果。

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

實現(xiàn)拖放排序

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

  1. 在一個列表中,每個元素都可以被拖放,那首先要給每個元素設(shè)置 draggable 屬性為 true。
  2. 監(jiān)聽每個元素的 dragstart 事件,對源對象做樣式處理來區(qū)分。
  3. 監(jiān)聽每個元素的 dragenter 事件,當(dāng)源對象進入到當(dāng)前元素里,就把源對象添加到該元素之前。這樣子后面的元素就會被源對象擠下去了,實現(xiàn)了排序的效果。
  4. 但是會發(fā)現(xiàn),源對象無法排到最后一個去,只能在倒數(shù)第二。這時就要監(jiān)聽 dragleave 事件,當(dāng)過程對象是最后一個元素時,源對象離開了過程對象,這時就把源對象添加到最后去。

主要代碼如下:

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中能兼容上面的拖動排序。

而且在我簡單的試驗中發(fā)現(xiàn),就是在 IE 中元素不設(shè)置 height 的時候,不會觸發(fā) dragleave 事件。

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

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:晉中 煙臺 牡丹江 安慶 內(nèi)蒙古 邯鄲 撫州 玉溪

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《HTML5拖放API實現(xiàn)拖放排序的實例代碼》,本文關(guān)鍵詞  HTML5,拖放,API,實現(xiàn),排序,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《HTML5拖放API實現(xiàn)拖放排序的實例代碼》相關(guān)的同類信息!
  • 本頁收集關(guān)于HTML5拖放API實現(xiàn)拖放排序的實例代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    91精品国产高清一区二区三区| 久久精品网站免费观看| 69久久99精品久久久久婷婷 | 国产精品久久久久久久久免费樱桃| 久久丝袜美腿综合| 在线免费视频一区二区| 免费视频一区二区| 亚洲h在线观看| 欧美日韩国产成人在线91| 91在线一区二区三区| 欧美色图第一页| 3d动漫精品啪啪| 最新成人av在线| 成人免费一区二区三区在线观看| 亚洲精品成人精品456| 欧美高清在线精品一区| 欧美日韩视频专区在线播放| 国产成人aaa| 欧美日韩一区二区三区免费看| 91黄色激情网站| 男女男精品视频网| 蜜臀av国产精品久久久久| 欧美大片免费久久精品三p| 欧美综合一区二区| 欧美日韩国产天堂| 国产精品久线观看视频| 粉嫩嫩av羞羞动漫久久久 | 亚洲欧美一区二区久久| 中文字幕一区二区三区av| 日韩激情av在线| 亚洲精品写真福利| 国产成人无遮挡在线视频| 亚洲一区二区三区视频在线| 26uuu欧美| 日韩视频免费观看高清完整版在线观看| 美女视频黄a大片欧美| 一区二区三区免费观看| 日韩成人免费电影| 欧美福利视频一区| 久久亚洲精华国产精华液| 欧美日产在线观看| 成人欧美一区二区三区黑人麻豆 | 亚洲欧洲精品一区二区精品久久久 | 成人性生交大合| 国产91清纯白嫩初高中在线观看| 日本午夜一本久久久综合| 欧美专区在线观看一区| 中文字幕欧美一区| 91美女视频网站| 日韩欧美专区在线| 国产激情偷乱视频一区二区三区| 26uuu色噜噜精品一区二区| 日韩欧美专区在线| 国产一区中文字幕| 久久久久久久久久久电影| 亚洲一区二区黄色| 日韩一级欧美一级| 精品影视av免费| 精品乱人伦小说| 精品少妇一区二区三区免费观看| 91精品国产一区二区三区蜜臀 | 一级做a爱片久久| 精品日韩一区二区三区| 在线亚洲一区二区| 麻豆精品一区二区综合av| 国产露脸91国语对白| 日韩免费看网站| 91麻豆6部合集magnet| 成人国产一区二区三区精品| 大胆亚洲人体视频| 欧美一区中文字幕| 国产精品欧美经典| 亚洲成人午夜影院| 亚洲国产精品激情在线观看| 欧美精品一区二区不卡 | 精品国产亚洲在线| 日韩美女视频在线| 国内精品伊人久久久久影院对白| 青青草91视频| 精品一区在线看| 成人激情免费网站| 精品久久久网站| 欧美一区二区高清| 国产99久久久久| 成人黄色电影在线| 欧美图区在线视频| 国产日产欧美一区| 三级久久三级久久| 国产午夜精品一区二区三区嫩草| 色婷婷综合久久久久中文一区二区 | 欧美一区二区三区小说| 久久精品无码一区二区三区| 日韩一级片网址| 国产精品电影一区二区三区| 久久久久久亚洲综合| 欧美日韩免费一区二区三区视频| 亚洲国产成人av网| 国产丝袜美腿一区二区三区| 91免费观看国产| 久久精品国产免费| 国产精品盗摄一区二区三区| 欧美激情一区二区三区在线| 国产一区二区剧情av在线| 欧美精品vⅰdeose4hd| 中文字幕亚洲一区二区va在线| 波多野结衣中文字幕一区二区三区| 国产欧美日韩三区| 亚洲特黄一级片| 国产精品污www在线观看| 日本三级韩国三级欧美三级| 福利电影一区二区三区| 欧美一三区三区四区免费在线看| 国产精品一区二区久激情瑜伽| 在线电影院国产精品| 亚洲欧洲成人精品av97| 日韩av网站免费在线| 国产色综合一区| 国产农村妇女毛片精品久久麻豆| 日韩欧美一区在线观看| 欧美高清在线视频| 91精品国产综合久久久久久久| 欧美日韩视频在线观看一区二区三区 | av中文字幕一区| 亚洲综合色噜噜狠狠| 在线播放国产精品二区一二区四区| 精品一区二区日韩| 亚洲成人第一页| 三级影片在线观看欧美日韩一区二区| 中文字幕国产精品一区二区| 欧美网站大全在线观看| 精品一二线国产| 亚洲一区二区3| 欧美日韩免费视频| 国产不卡在线视频| 日韩精品午夜视频| 久久机这里只有精品| 色综合天天综合网天天狠天天| 午夜日韩在线观看| 99精品久久只有精品| 成人免费一区二区三区在线观看| 国产91精品免费| 国产综合久久久久久鬼色| 91精品国产品国语在线不卡| 国产a精品视频| 99久久99久久精品免费观看| 国产精品久久久久久久裸模| 欧美三区在线观看| 欧美视频一区在线| 成人一二三区视频| 欧美一区二区人人喊爽| 日韩欧美中文字幕一区| 国产精品国产精品国产专区不片| 欧美日韩一区二区在线观看| 中文字幕亚洲视频| 亚洲欧美激情插| 午夜精品久久久久久久久久| 99国产精品久久| 91麻豆成人久久精品二区三区| 国产精品白丝jk白祙喷水网站| 成人综合日日夜夜| 欧美日韩亚洲高清一区二区| 精品视频在线看| 久久一区二区三区四区| 亚洲人成精品久久久久| 另类小说色综合网站| 不卡电影一区二区三区| 国产精品欧美极品| 一区二区三区资源| 精品伊人久久久久7777人| 一区二区免费看| 国产在线播放一区三区四| 日韩精品亚洲一区| 亚洲国产精品久久久久婷婷884| 欧美一区二区播放| 亚洲国产精品一区二区久久恐怖片| heyzo一本久久综合| 美女免费视频一区| 成人动漫精品一区二区| 国内外成人在线| eeuss鲁片一区二区三区| 久久久久久久久久久久久夜| 国产精品久久久久久久裸模| 国产欧美日韩麻豆91| 国产精品自在欧美一区| 久久蜜臀中文字幕| 免费成人美女在线观看| 日韩西西人体444www| 91黄色免费版| 久久久久久久久久久久久久久99 | 欧美日韩黄视频| 成人动漫中文字幕| 福利91精品一区二区三区| 精品国产一区二区精华| 99久久精品免费| 亚洲国产精品传媒在线观看| 精品欧美一区二区三区精品久久| 国产欧美日韩中文久久| 中文字幕免费不卡| 日韩精品1区2区3区| 国产乱一区二区|