pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

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

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

前言

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

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

拖放事件

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

源對象:

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

過程對象:

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

目標對象:

  1. drop:源對象被拖放到目標對象內(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,用于在源對象和目標對象間傳遞數(shù)據(jù)。接下來認識一下這個對象的方法和屬性,來了解它是如何傳遞數(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è)置拖放圖標。接收三個參數(shù),第一個為圖標元素,第二個為圖標元素離鼠標指針的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 屬性

這兩個屬性結(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 事件,當源對象進入到當前元素里,就把源對象添加到該元素之前。這樣子后面的元素就會被源對象擠下去了,實現(xiàn)了排序的效果。
  4. 但是會發(fā)現(xiàn),源對象無法排到最后一個去,只能在倒數(shù)第二。這時就要監(jiān)聽 dragleave 事件,當過程對象是最后一個元素時,源對象離開了過程對象,這時就把源對象添加到最后去。
【網(wǎng)站聲明】本站除付費源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學習交流,請勿用于商業(yè)用途。如損害你的權(quán)益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了有關(guān)HTML5頁面在iPhoneX適配問題,需要的朋友可以參考下
本篇文章主要介紹了html5中canvas圖表實現(xiàn)柱狀圖的示例,本文使用canvas來實現(xiàn)一個圖表,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
Adobe公司出品的多媒體處理軟件產(chǎn)品線較多,涵蓋了音視頻編輯、圖像處理、平面設(shè)計、影視后期等領(lǐng)域。這篇文章主要介紹了Adobe Html5 Extension開發(fā)初體驗圖文教程,非常不錯,需要的朋
這篇文章主要介紹了基于HTML5的WebGL經(jīng)典3D虛擬機房漫游動畫,需要的朋友可以參考下
這篇文章主要介紹了html5實現(xiàn)移動端適配完美寫法,需要的朋友可以參考下
本篇文章主要介紹了HTML5響應(yīng)式(自適應(yīng))網(wǎng)頁設(shè)計的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
主站蜘蛛池模板: 齿轮减速机电机一体机_齿轮减速箱加电机一体化-德国BOSERL蜗轮蜗杆减速机电机生产厂家 | 贝壳粉涂料-内墙腻子-外墙腻子-山东巨野七彩贝壳漆业中心 | 啤酒设备-小型啤酒设备-啤酒厂设备-济南中酿机械设备有限公司 | 无痕胶_可移胶_无痕双面胶带_可移无痕胶厂家-东莞凯峰 | 开平机_纵剪机厂家_开平机生产厂家|诚信互赢-泰安瑞烨精工机械制造有限公司 | 网架支座@球铰支座@钢结构支座@成品支座厂家@万向滑动支座_桥兴工程橡胶有限公司 | 高空重型升降平台_高空液压举升平台_高空作业平台_移动式升降机-河南华鹰机械设备有限公司 | 瓶盖扭矩测试仪-瓶盖扭力仪-全自动扭矩仪-济南三泉中石单品站 | 棉柔巾代加工_洗脸巾oem_一次性毛巾_浴巾生产厂家-杭州禾壹卫品科技有限公司 | 精益专家 - 设备管理软件|HSE管理系统|设备管理系统|EHS安全管理系统 | 生鲜配送系统-蔬菜食材配送管理系统-连锁餐饮订货配送软件-挪挪生鲜供应链管理软件 | 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 活性炭厂家-蜂窝活性炭-粉状/柱状/果壳/椰壳活性炭-大千净化-活性炭 | 模切之家-专注服务模切行业的B2B平台! | 铝镁锰板_铝镁锰合金板_铝镁锰板厂家_铝镁锰金属屋面板_安徽建科 | 小型高低温循环试验箱-可程式高低温湿热交变试验箱-东莞市拓德环境测试设备有限公司 | 一体化净水器_一体化净水设备_一体化水处理设备-江苏旭浩鑫环保科技有限公司 | 许昌奥仕达自动化设备有限公司 | 压装机-卧式轴承轮轴数控伺服压装机厂家[铭泽机械] | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 新型锤式破碎机_新型圆锥式_新型颚式破碎机_反击式打沙机_锤式制砂机_青州建源机械 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | 冷镦机-多工位冷镦机-高速冷镦机厂家-温州金诺机械设备制造有限公司 | 有机废气处理-rto焚烧炉-催化燃烧设备-VOC冷凝回收装置-三梯环境 | 太平洋亲子网_健康育儿 品质生活 | 成都装修公司-成都装修设计公司推荐-成都朗煜装饰公司 | 换链神器官网-友情链接交换、购买交易于一体的站长平台 | 丹尼克尔拧紧枪_自动送钉机_智能电批_柔性振动盘_螺丝供料器品牌 | 灌木树苗-绿化苗木-常绿乔木-价格/批发/基地 - 四川成都途美园林 | 定坤静电科技静电消除器厂家-除静电设备| 节流截止放空阀-不锈钢阀门-气动|电动截止阀-鸿华阀门有限公司 | 塑料瓶罐_食品塑料瓶_保健品塑料瓶_调味品塑料瓶–东莞市富慷塑料制品有限公司 | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | 彼得逊采泥器-定深式采泥器-电动土壤采样器-土壤样品风干机-常州索奥仪器制造有限公司 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | WF2户外三防照明配电箱-BXD8050防爆防腐配电箱-浙江沃川防爆电气有限公司 |