新闻中心

html5使用drag和drop排序列表项 html5实现列表项拖拽排序的交互效果

2025-10-21
浏览次数:
返回列表
首先设置列表项draggable="true"并绑定dragstart、dragover、drop事件,通过J*aScript监听拖拽行为并调用insertBefore调整DOM顺序,实现原生拖拽排序。

html5使用drag和drop排序列表项 html5实现列表项拖拽排序的交互效果

使用 HTML5 原生的 Drag and Drop API 实现列表项拖拽排序,无需引入第三方库,适合轻量级交互场景。核心思路是为列表项设置可拖拽属性,并监听拖放事件来调整 DOM 顺序。

启用拖拽并绑定事件

要使列表项可拖拽,需设置 draggable="true",并对每个 li 元素绑定拖拽相关事件:

  • dragstart:记录被拖动的元素
  • dragover:阻止默认行为以允许放置
  • drop:执行元素交换或插入
  • dragend(可选):清理状态

示例结构:

    id="sortable">
      
  • draggable="true">项目 1

  •   
  • draggable="true">项目 2

  •   
  • draggable="true">项目 3

J*aScript 实现拖拽逻辑

通过脚本控制拖拽流程:

const list = document.getElementById('sortable');
let draggedItem = null;

// 拖拽开始

list.addEventListener('dragstart', function(e) {
  draggedItem = e.target;
  e.dataTransfer.effectAllowed = 'move';
});

// 允许放置

小爱开放平台 小爱开放平台

小米旗下小爱开放平台

小爱开放平台 291 查看详情 小爱开放平台 list.addEventListener('dragover', function(e) {
  e.preventDefault();
  e.dataTransfer.dropEffect = 'move';
});

// 处理放置:将拖动项插入到目标位置

list.addEventListener('drop', function(e) {
  e.preventDefault();
  if (e.target !== draggedItem && e.target.tagName === 'LI') {
    const children = Array.from(list.children);
    const targetIndex = children.indexOf(e.target);
    const draggedIndex = children.indexOf(draggedItem);

    if (targetIndex > draggedIndex) {
      list.insertBefore(draggedItem, e.target.nextSibling);
    } else {
      list.insertBefore(dragedItem, e.target);
    }
  }
});

视觉反馈优化体验

添加 CSS 样式提升交互感:

li[draggable] {
  cursor: move;
}
li:hover {
  background-color: #f0f0f0;
}
li:active {
  opacity: 0.7;
}

dragstartdragend 中也可以动态添加类名,突出当前拖拽项。

基本上就这些。原生实现简单直接,适用于基础排序需求,不复杂但容易忽略细节如 preventDefault 和 DOM 插入逻辑。

以上就是html5使用drag和drop排序列表项 html5实现列表项拖拽排序的交互效果的详细内容,更多请关注其它相关文章!


# css  # 文档  # 游戏开发  # 转换工具  # 使用技巧  # 拖动  # 绑定  # 小爱  # 拖拽排序  # go  # html  # java  # javascript  # html5  # 拖拽  # 短视频营销搜索推广方案  # 网站推广名字  # 机器网站建设哪家质量好  # 免费发信息推广网站  # 网站怎么促销推广会员卡  # 西藏培训网站建设  # 推广营销稿怎样写好一点  # SEO人才落户深圳流程  # 博翠山营销推广方案  # 佳木斯seo推广打造  # 适用于  # 如何在 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: UC浏览器网页版登录入口官网 电脑版网址入口  TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程  在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析  Excel Power Pivot如何处理XML数据源 构建高级数据模型  J*aScript map 迭代中检测空数组元素的有效方法  sublime怎么预览Markdown渲染效果_Markdown Preview插件 for sublime教程  如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧  一加手机电池耗电快怎么办_一加手机电池耗电快的解决方法  MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId  Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑  电脑IP地址怎么查 查看本机IP地址的几种方法  微信网页版官方入口教程 微信网页版网页版快速登录步骤  使用Pandas转换并合并DataFrame:多列映射至统一结构  C++如何操作注册表_Windows平台下C++读写注册表的API函数详解  React中useState与局部变量:理解组件状态管理与渲染机制  J*a应用集成GitHub CLI与API认证指南  c++20的std::jthread是什么_c++可中断线程与RAII式管理  J*aScript中如何高效提取对象指定属性  ArrayList与LinkedList核心操作的Big-O复杂度分析  大象笔记网页版入口 印象笔记网页版登录入口  Golang如何通过reflect操作map_Golang reflect map操作与遍历技巧  Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】  在J*a中如何隐藏复杂性_使用门面模式组织对象交互  Fabric模组开发:自定义物品与物品组的现代管理方法  J*aScript中管理异步API调用:确保操作顺序与数据一致性  Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示  Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法  必由学网页版入口 必由学官方平台直接访问  在python-socketio事件处理器中安全访问Flask应用上下文  qq游戏免费畅玩入口_qq游戏电脑版快速启动  最新韩小圈网页版登录入口_官网在线观看官方链接  必由学官方网站入口 必由学学生教师共用登录通道  哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法  2025-2030年全球乘用车销量预测:新能源成增长主力  Pyrogram与g4f集成:异步编程实践与常见错误解决  J*a里如何实现线程安全的懒加载单例_懒加载单例实现方法解析  AO3官方镜像站点汇总 AO3同人作品网页版直达链接  汽水音乐在线解析 汽水音乐在线解析入口  HTML元素状态管理:根据DIV内容动态启用/禁用按钮  邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧  Win11 USB传输速度慢怎么解决 Win11 USB驱动更新与设置  Go语言中的*string:深入理解字符串指针  一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰  如何使用 Excel 发布器与 Power BI 分享 Excel 洞察  126邮箱网页版官方入口 126邮箱账号在线登录平台  如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】  电脑安装程序提示“错误1722”怎么办_Windows Installer服务问题解决【教程】  Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式  Win11怎么开启高性能模式_Windows 11电源计划优化设置  谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法 

搜索