如何在HTML5中通过DragAndDrop接口实现列表项的拖拽排序交互功能

陌瑶小哥_7182

陌瑶小哥_7182

2026-05-08

940人浏览

原创

html5原生drag and drop实现列表拖拽排序需设li的draggable="true",在dragstart存数据、dragover中preventdefault并计算插入位置、drop时更新数据或dom,dragend清理状态,注意禁用文本选中、设置effectallowed,并知悉移动端不支持。

如何在html5中通过draganddrop接口实现列表项的拖拽排序交互功能

在HTML5中用原生Drag and Drop API实现列表项拖拽排序,关键在于正确监听拖拽生命周期事件、维护数据状态、动态更新DOM顺序,并避免浏览器默认行为干扰。它不依赖第三方库,但需细致处理拖拽位置判定和视觉反馈。

基础结构与拖拽属性设置

让每个列表项可拖拽,需为其添加draggable="true"属性,并绑定dragstart事件用于记录被拖项索引或数据:

  • 仅对
  • (或自定义项容器)设draggable="true",不要加在
      上
    • 在dragstart中使用e.dataTransfer.setData()存标识信息(如"text/plain"类型 + 项ID或索引)
    • 为
        设置dragover和drop事件监听器——这是接收拖拽的关键

      处理拖拽进入与放置目标定位

      dragover事件默认被浏览器阻止(防止打开文件等),必须调用e.preventDefault()才能触发drop;同时可用它实现“插入线”提示效果:

      Html2md
      Html2md

      使用 Readability + Turndown 将 HTML 页面转换为干净的、Agent 友好的 Markdown。去除导航栏、广告、页脚、Cookie 横幅、社交按钮等干扰元素。支持 URL...

      下载
      • 在dragover中计算鼠标相对于
          的Y坐标,遍历所有
        • 获取其getBoundingClientRect(),判断鼠标是否处于某项的上半区或下半区
        • 动态添加临时::before或::after伪元素(或一个绝对定位的
          )显示插入位置
        • 记录当前悬停位置对应的插入索引(例如:在第2项上方 → 插入到索引2位置)
        • 执行排序并同步数据与视图

          drop事件触发时,根据之前记录的插入索引,从原始数组中移除被拖项、插入到新位置,再重新渲染列表或直接操作DOM:

          • 从e.dataTransfer.getData("text/plain")取出拖拽项标识,结合原始数据源定位该项
          • 若采用DOM直改方式:用insertBefore()将被拖
          • 插入到目标位置的
          • 前;注意先remove()再insertBefore(),否则会自动移除
          • 更推荐“数据驱动”:更新JS数组顺序后,调用一次renderList()全量重绘(适合中小型列表),确保状态与界面严格一致
          • 务必在dragend中清理视觉提示(如移除插入线)和临时状态

          增强体验与常见避坑点

          原生API易忽略细节,影响交互自然性:

          • 禁用dragstart时的默认文本选中:给
          • 加user-select: none
          • 拖拽过程中鼠标图标可能异常?可在dragstart中设置e.dataTransfer.effectAllowed = "move",并在dragover中设e.dataTransfer.dropEffect = "move"
          • 移动端不支持原生Drag & Drop —— 如需兼容,应降级为touch事件模拟,或引入interact.js等轻量库
          • 避免在
              上监听dragenter来判断首次进入,因子元素冒泡可能导致重复触发;优先依赖dragover和位置计算

          前端入门到VUE实战笔记:立即使用
          在学习笔记中,你将探索 前端 的入门与实战技巧!

          相关文章

          HTML速学教程(入门课程)
          HTML速学教程(入门课程)

          HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

          下载

          相关标签:

          html html5 拖拽排序

          本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

          相关专题

          更多
          python是前端还是后端
          python是前端还是后端

          Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

          2023.08.11

          2603

          5

          前端如何实现即时通讯
          前端如何实现即时通讯

          实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

          2023.10.09

          5663

          6

          前端和后端的区别
          前端和后端的区别

          前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

          2024.03.19

          6650

          13

          php和前端的关联介绍
          php和前端的关联介绍

          php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

          2024.03.22

          6338

          10

          前端外包工作内容有哪些
          前端外包工作内容有哪些

          前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

          2024.05.22

          903

          5

          html版权符号
          html版权符号

          html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

          2023.06.14

          6495

          7

          html在线编辑器
          html在线编辑器

          html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

          2023.06.21

          3632

          4

          html网页制作
          html网页制作

          html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

          2023.07.31

          3310

          5

          html空格
          html空格

          html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

          2023.08.01

          3319

          5

          热门下载

          更多
          网站特效
          /
          网站源码
          /
          网站素材
          /
          前端模板

          精品课程

          更多
          相关推荐
          /
          热门推荐
          /
          最新课程
          GDB 17.2 官方文档集合
          GDB 17.2 官方文档集合

          共0课时 | 0人学习

          Bootstrap 入门安装配置
          Bootstrap 入门安装配置

          共0课时 | 0人学习

          38+ PhpStorm 提示和技巧
          38+ PhpStorm 提示和技巧

          共1课时 | 226人学习