• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    Html5原生拖拽相关事件简介以及基础实现

    发布者: 浪子 | 发布时间: 2025-6-16 12:29| 查看数: 80| 评论数: 0|帖子模式

    公司项目需求,要实现任务卡片在不同任务列表之间进行拖拽实现任务类别的更改。于是找了一下相关文章,稍微学习了一下。实现效果如下图。
    拖拽实现

    主要用到的是H5自带的拖拽效果。其实项目前端部分是使用React编写的,也是在使用H5实现了之后才了解到Dan Abramov大佬有个React-DnD组件对原生拖拽方法进行了封装。稍微学习了一下,很强。后续有使用到再写篇文章进行分享。
    相关事件定义与用法
    涉及一个属性六个事件。事件均为H5原生事件。
    属性
         
    • draggable:正常div是不允许进行拖动的。需要添加属性draggable="true"将元素设置为可拖动。
           
    事件
         
    • ondragstart:拖拽元素事件。在被拖拽时被调用。   
    • ondrag:拖拽元素事件。在元素正在被拖拽时调用。   
    • ondragend:拖拽元素事件。在拖拽元素放置时调用。   
    • ondragenter:放置元素事件。在拖拽元素进入到放置元素有效区域时调用。   
    • ondragover:放置元素事件。在拖拽元素覆盖放置元素有效区域时调用   
    • ondragleave:放置元素事件。在拖拽元素离开放置元素有效区域时调用。   
    • ondrop:放置元素事件。在拖拽元素被放置在放置元素中调用。
           
    基础代码实现
    拖拽元素相关事件实现代码如下。
    1. function handleOndragstart() {
    2.     /*
    3.     该事件为拖拽元素被拖拽时调用。一般用于获取该拖拽元素的唯一标识,如id等。以方便后续数据更新时进行元素定位
    4.      */
    5. }

    6. function handleOndragend() {
    7.     /*
    8.     该事件在拖拽元素被放置时调用。一般用于重置变量操作
    9.      */
    10. }

    11. function handleOndrag() {
    12.     /*
    13.     该事件凭个人需求进行功能实现
    14.      */
    15. }
    复制代码
    拖拽元素H5代码如下
    1. <div
    2.      draggable="true"
    3.      ondragstart="handleOndragstart()"
    4.      ondrag="handleOndarg()"
    5.      ondragend="handleOndragend()"
    6.      >
    7.     该元素为拖拽元素
    8. </div>
    复制代码
    放置元素相关事件实现代码如下
    1. /*
    2. 默认情况下,数据/元素不能放置到其他元素中。 如果要实现该功能,我们需要防止元素的默认处理方法。我们可以通过调用 event.preventDefault() 方法来实现 ondragover 事件。
    3. */
    4. function handleOndragover(event) {
    5.     event.preventDefault();
    6.     /*
    7.     在这里进行你的函数处理
    8.      */
    9. }

    10. function handleOndragenter(event) {
    11.     event.preventDefault();
    12.     /*
    13.     在这里进行你的函数处理
    14.      */
    15. }

    16. function handleOndragleave(event) {
    17.     event.preventDefault();
    18.     /*
    19.     在这里进行你的函数处理
    20.      */
    21. }

    22. function handleOndrop(event) {
    23.     event.preventDefault();  // 清除默认事件。drop 事件的默认行为是以链接形式打开
    24.     /*
    25.     一般在该事件中,也就是拖拽元素被放下的时候与后端进行交互进行数据更新
    26.      */
    27. }
    复制代码
    放置元素H5代码如下
    1. <div
    2.      ondragenter="handleOndragenter(event)"
    3.      ondragover="handleOndragover(event)"
    4.      ondragleave="handleOndragleave(event)"
    5.      ondrop=“handleOndrop(event)
    6.      >
    7.     该元素为放置元素
    8. </div>
    复制代码
    实例
    以下代码可实现在两个div之间进行子元素的拖拽
    1. <!DOCTYPE html>
    2. <html lang="zh-CN">
    3.   <head>
    4.     <meta charset="UTF-8" />
    5.     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    6.     <title>拖拽实现</title>
    7.     <style type="text/css">
    8.       .parent {
    9.         display: flex;
    10.         width: 450px;
    11.         justify-content: space-around;
    12.       }
    13.       .container {
    14.         height: 300px;
    15.         width: 200px;
    16.         background-color: rgba(255, 255, 0, 0.3);
    17.         display: flex;
    18.         flex-direction: column;
    19.         justify-content: center;
    20.         align-items: center;
    21.       }
    22.       .box {
    23.         width: 100px;
    24.         height: 50px;
    25.         background-color: rgba(255, 255, 255, 1);
    26.       }
    27.     </style>
    28.     <script type="text/javascript">
    29.       function handleOndragstart(event) {
    30.         // 设置被拖动的数据,可简单理解为设置Box的值为被拖动元素的id。此处为"Box"
    31.         event.dataTransfer.setData("Box", event.target.id);
    32.       }
    33.       function handleOndragover(event) {
    34.         event.preventDefault();
    35.       }
    36.       function handleOndrop(event) {
    37.           // 拖拽元素被放下时调用
    38.         event.preventDefault();
    39.         var data = event.dataTransfer.getData("Box");
    40.         // 将拖拽元素追加到改放置元素中
    41.         event.target.appendChild(document.getElementById(data));
    42.       }
    43.     </script>
    44.   </head>

    45.   <body>
    46.     <div class="parent">
    47.       <div
    48.         class="container"
    49.         ondragover="handleOndragover(event)"
    50.         ondrop="handleOndrop(event)"
    51.       >
    52.         <div
    53.           class="box"
    54.           draggable="true"
    55.           id="Box"
    56.           ondragstart="handleOndragstart(event)"
    57.         ></div>
    58.       </div>
    59.       <div
    60.         class="container"
    61.         ondragover="handleOndragover(event)"
    62.         ondrop="handleOndrop(event)"
    63.       ></div>
    64.     </div>
    65.   </body>
    66. </html>
    复制代码
    最后

    暂时写这么多吧。以上的实例也是用H5写的,并没有使用React实现。以后再试着写个React版的简单demo吧。这应该也算是我的第一篇分享文章,希望能坚持下去。
    参考链接:
    https://www.jb51.net/article/154105.htm
    https://www.runoob.com/try/try.php?filename=tryhtml5_draganddrop2
    到此这篇关于Html5原生拖拽相关事件简介以及基础实现的文章就介绍到这了,更多相关Html5原生拖拽内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/html5/752965.html
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表