• JavaScript 学习-50.实现页面菜单拖放(Drag 和 Drop)


    前言

    拖放是一种常见的操作,即抓取对象以后从一个位置拖到另一个位置。
    在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放。

    拖放(Drag 和 Drop)

    在拖曳操作中,被拖曳的元素称做源对象,是指页面中设置了draggable="true"属性的元素;源对象进入的元素称作目标元素,目标元素可以是页面的任一元素。
    把元素设置为可拖放首先:为了把一个元素设置为可拖放,请把 draggable 属性设置为 true:

    
    
    • 1

    需要注意的是,图片和链接默认是可以拖曳的,它不用添加draggable属性。

    源对象的事件监听

    事件事件描述
    ondrag作用于整个拖曳过程
    ondragstart当拖曳开始时触发
    ondragend当拖曳结束时触发

    目标元素的事件监听:

    事件事件描述
    ondragenter当源对象进入目标元素时触发
    ondragover当源对象悬停在目标元素上方时触发
    ondragleave当源对象离开目标元素时触发
    ondrop当源对象在目标元素上方时释放鼠标时触发

    拖放的内容 - ondragstart 和 setData()

    然后,规定当元素被拖动时发生的事情。

    在上面的例子中,ondragstart 属性调用了一个 drag(event) 函数,规定拖动什么数据。

    dataTransfer.setData() 方法设置被拖动数据的数据类型和值:

    function drag(ev) {
        ev.dataTransfer.setData("text", ev.target.id);
    }
    
    • 1
    • 2
    • 3

    在本例中,数据类型是 “text”,而值是这个可拖动元素的 id (“drag1”)。

    拖到何处 - ondragover

    ondragover 事件规定被拖动的数据能够被放置到何处。

    默认地,数据/元素无法被放置到其他元素中。为了实现拖放,我们必须阻止元素的这种默认的处理方式。

    这个任务由 ondragover 事件的 event.preventDefault() 方法完成:

    event.preventDefault()
    
    • 1

    进行放置 - ondrop

    当放开被拖数据时,会发生 drop 事件。

    在上面的例子中,ondrop 属性调用了一个函数,drop(event):

    function drop(ev) {
        ev.preventDefault();
        var data = ev.dataTransfer.getData("text");
        ev.target.appendChild(document.getElementById(data));
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    代码解释:
    调用 preventDefault() 来阻止数据的浏览器默认处理方式(drop 事件的默认行为是以链接形式打开)
    通过 dataTransfer.getData() 方法获得被拖的数据。该方法将返回在 setData() 方法中设置为相同类型的任何数据
    被拖数据是被拖元素的 id (“drag1”)
    把被拖元素追加到放置元素中

    使用示例

    一个完整的拖曳效果是由拖曳(Drag)和释放(Drop)组成的,在HTML 5中任何元素都能够实现拖曳操作,可以通过为元素添加属性draggable=‘true’ 来实现,
    在拖曳操作中,被拖曳的元素称做源对象,是指页面中设置了draggable="true"属性的元素;源对象进入的元素称作目标元素,目标元素可以是页面的任一元素。

    
    
    
        
        
        
        拖曳
        
    
    
        

    图片和链接默认是可以拖曳的,它不用添加draggable属性

    链接默认是可以拖动的 链接默认是可以拖动的 Image

    拖曳内容1

    拖曳内容2

    拖曳内容3

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    页面显示效果

    script代码

    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    主要用到3个

    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    需注意的是被拖动的元素需要给个id属性,上面的示例才会生效。

  • 相关阅读:
    数值分析思考题(钟尔杰版)参考解答——第六章
    【Django】开发日报_3.2_Day:模板继承
    Android app保活(前台服务)
    FastestDet为arm而生
    计算机毕业设计(附源码)python装修服务分析系统
    Java 将Excel转为UOS
    Apache HTTPD 换行解析漏洞(CVE-2017-15715)
    iOS编译openmp
    ElasticSerach7.15.2插件中文分词器(IK+pinyin)
    在树莓派上控制GPIO常用的编程语言有哪些
  • 原文地址:https://blog.csdn.net/qq_27371025/article/details/127862099