视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
详解javascripthtml5轻松实现拖动功能的技巧
2020-11-27 20:23:32 责编:小OO
文档

这篇文章主要为大家详细介绍了javascript html5轻松实现拖动功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

拖放(drag和drop)是html5标准组成,下面我们从五个方面对其进行叙述,分别是如何成为拖动物体,如何成为拖动目标,拖动物体上拥有的事件,拖动目标上拥有的事件以及拖放物体间如何传递信息。

拖动物体上拥有的事件

  • dragstart (在物体刚被拖动时触发)

  • drag (在dragstart事件触发之后就被触发)

  • dragend (拖动事件结束时触发)

  • 拖动目标上拥有的事件

  • dragenter (当拖拽元素进入放置目标时触发)

  • dragover (当拖拽元素在放置目标中移动时触发,类似于mouseover)

  • drop (当拖拽元素放置在放置目标中时触发)

  • 如何成为拖动物体

    在html中img元素默认可以进行拖拽,其它元素需要设置draggable=true,即可对其进行拖拽。

    <p draggable="true"></p>

    如何成为拖动目标

    html中,元素默认不能成为放置目标,只有我们禁止了drapenter和drapover事件的默认行为时,可以称为拖放目标。

    拖放物体间如何传递信息

    事件中具有一个dataTransfer对象,它拥有的两个常用方法setData()和getData(),分别用于在存放拖拽信息以及获取拖拽信息。其中,setData()只能在拖拽事件刚开始时设置,即dragstart事件时设置,getData()则一般在放置获取,即drop事件触发时获取。

    完整代码

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
     <meta charset="UTF-8">
     <title>HTML5 拖拽</title>
    </head>
    
    <body>
     <p draggable="true"></p>
     <p style="height: 150px" id="dragobj" draggable="true">
     <img src="c_06.jpg" alt="">
     </p>
     <p id="droptarget" style="width: 150px; height: 150px;background-color: #eee;"></p>
    </body>
    <script>
    var droptarget = document.getElementById('droptarget');
    var dragobj = document.getElementById('dragobj');
    
    // drapobj 拖拽元素
    // droptarget 放置目标
    dragobj.addEventListener('dragstart', function(event) {
     event.dataTransfer.setData('id', dragobj.id);
    });
    droptarget.addEventListener('dragenter', function(event) {
     event.preventDefault();
    });
    droptarget.addEventListener('dragover', function(event) {
     event.preventDefault();
    });
    droptarget.addEventListener('drop', function(event) {
     var id = event.dataTransfer.getData('id');
     var obj = document.getElementById(id);
     event.preventDefault();
     this.appendChild(obj);
    });
    </script>
    
    </html>

    存在问题

    火狐浏览器中拖拽图片默认打开新窗口,根据javascript高级程序设计中在drop事件中禁止默认事件,未解决问题。

    解决方法:将图片作为p的背景图片,将p作为拖拽物体,则不存在此问题。

    最终代码

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
     <meta charset="UTF-8">
     <title>HTML5 拖拽</title>
     <style>
     p {
     width: 120px;
     height: 136px;
     }
     
     #dragobj {
     background: url('c_06.jpg') no-repeat;
     }
     
     #droptarget {
     background-color: #eee;
     }
     </style>
    </head>
    
    <body>
     <p id="dragobj" draggable="true">
     </p>
     <p id="droptarget"></p>
    </body>
    <script>
    var droptarget = document.getElementById('droptarget');
    var dragobj = document.getElementById('dragobj');
    
    // drapobj 拖拽元素
    // droptarget 放置目标
    dragobj.addEventListener('dragstart', function(event) {
     event.dataTransfer.setData('id', dragobj.id);
    });
    droptarget.addEventListener('dragenter', function(event) {
     event.preventDefault();
    });
    droptarget.addEventListener('dragover', function(event) {
     event.preventDefault();
    });
    droptarget.addEventListener('drop', function(event) {
     var id = event.dataTransfer.getData('id');
     var obj = document.getElementById(id);
     event.preventDefault();
     this.appendChild(obj);
    });
    </script>
    
    </html>

    下载本文
    显示全文
    专题