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

首先设置列表项draggable=”true”并绑定dragstart、dragover、drop事件,通过JavaScript监听拖拽行为并调用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

JavaScript 实现拖拽逻辑

通过脚本控制拖拽流程:

立即学习“前端免费学习笔记(深入)”;

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

// 拖拽开始

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

// 允许放置

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实现列表项拖拽排序的交互效果的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1587192.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
html5怎么取消边框颜色_HTML5边框样式去除方法
上一篇 2025年12月23日 03:13:00
html5使用device orientation检测设备方向 html5使用陀螺仪数据的方法
下一篇 2025年12月23日 03:13:12

相关推荐

  • 详解MySql Group by函数真正的打开方法!

    本篇文章给大家介绍mysql group by 函数的正确打开方式,希望对大家有帮助! MySql Group by 函数的正确打开方式 在使用分组函数时, 进行结果集筛选, 遇到的一些问题以及解决办法【推荐:mysql视频教程】 1. 应用场景 有两张表 文章表(一对多留言表) t_posts: …

    用户投稿 2026年9月1日
    000
  • 如何利用 Composer 简化 CMS 开发:Lebenlabs/SimpleCMS 库的实践应用

    可以通过一下地址学习composer:学习地址 在开始使用lebenlabs/simplecms之前,我遇到了以下几个挑战: 安装和配置复杂:许多CMS需要繁琐的安装步骤和配置,这对我来说是一个大问题。依赖管理:手动管理依赖项和版本控制非常耗时且容易出错。权限管理:需要实现一个灵活且安全的权限系统,…

    用户投稿 2026年9月1日
    200
  • 如何利用输入框高效便捷地实现颜色选择器?

    优雅高效的颜色选择器:利用输入框实现便捷交互 许多应用需要用户选择颜色,但传统的颜色选择器往往显得繁琐。如何才能在保持良好用户体验的同时,简化颜色选择流程呢?本文介绍一种利用输入框和下拉菜单,实现类似自动完成 (Autocomplete) 效果的便捷颜色选择器方案,并解决用户提出的常见问题。 用户希…

    2026年9月1日
    100
  • Webpack打包:如何将字体资源重定向到自定义文件夹?

    Webpack 5字体资源打包:自定义文件夹及路径更新 在Webpack项目打包过程中,常常需要将字体文件整理到指定的文件夹。本文介绍如何利用Webpack 5配置,将所有字体资源打包到custom_fonts文件夹,并自动修正CSS文件中字体文件的引用路径。 问题:开发者使用file-loader…

    2026年9月1日
    000
  • Java方法重载与重写有什么区别 如何合理使用

    方法重载发生在同一类中,方法名相同但参数列表不同,用于提供多种调用方式;方法重写发生在子类继承父类时,方法名、参数列表和返回类型必须一致,用于改变父类方法的实现。 方法重载(Overload)和重写(Override)是Java中实现多态的两种重要机制,它们虽然都涉及方法名的重复使用,但应用场景和规…

    2026年9月1日
    000
  • 原生JS如何实现表格滚动吸附,精确控制行列显示隐藏?

    原生JS实现表格滚动吸附:精确控制行列显示隐藏 本文探讨如何使用原生JavaScript精确控制表格滚动,实现类似Excel表格的滚动吸附效果,即每次滚动精确隐藏或显示一行或一列。 这需要超越浏览器默认滚动行为,对滚动事件进行更精细的控制。 核心在于“滚动吸附”机制。 不同于CSS实现的滚动吸附,这…

    2026年9月1日
    000
  • PC端和响应式H5项目适配:如何兼顾效率和用户体验?

    跨平台网页开发:PC端与响应式H5项目的最佳适配策略 许多开发者精通响应式H5的适配技巧,例如运用PostCSS插件(如postcss-pxtorem或postcss-px-to-viewport), 通常基于iPhone 6设计稿。但PC端网页适配策略却大相径庭。本文将探讨PC端网页适配方案,以及…

    2026年9月1日
    200
  • Java Stream.flatMap方法处理嵌套集合

    flatMap可将嵌套集合展平为单一流,通过将每个元素转换为流并合并结果,实现一对多映射。例如,二维字符串列表经flatMap处理后得到单一字符串列表;在对象集合中,如学生含课程列表,可通过flatMap提取所有课程并去重;对于多层结构(学校→班级→学生→课程),可连续使用flatMap逐层展开,最…

    2026年9月1日
    200
  • VSCode标签怎么自动补齐_VSCodeHTML/XML标签自动补全设置教程

    答案:VSCode中HTML/XML标签自动补齐失效通常由Emmet未启用、文件类型识别错误或设置冲突导致。需检查emmet.triggerCharacters和editor.quickSuggestions设置,确认文件语言模式正确,并确保emmet.includeLanguages配置合理。同时…

    2026年9月1日
    100
  • Java Collections.frequency方法如何统计频率

    Collections.frequency方法用于统计集合中某元素出现次数,接收集合和目标元素为参数,遍历集合通过equals()比较并返回匹配次数;适用于List等Collection类型,支持自定义对象(需重写equals),可统计null,但集合为null时抛异常,时间复杂度O(n),对Set…

    2026年9月1日
    300
  • 如何实现JavaScript元素平滑滚动?

    优雅的JavaScript滚动:告别生硬跳转 在JavaScript中操控元素的scrollLeft属性时,常常会遇到滚动效果过于生硬的问题。本文将介绍如何为scrollLeft的数值变化添加动画效果,打造更流畅、更舒适的滚动体验。 关键在于避免直接修改scrollLeft值造成的突兀感。直接赋值会…

    2026年9月1日
    700
  • java学习应用篇|windows安装JDK及配置环境变量

    java学习应用篇|windows安装JDK及配置环境变量java学习应用篇|windows安装JDK及配置环境变量java学习应用篇|windows安装JDK及配置环境变量java学习应用篇|windows安装JDK及配置环境变量

    学习前言 实际上,本系统中最有价值的内容已经在前两篇文章中介绍完毕,接下来的内容主要是对前面知识的应用。新知识层出不穷,每隔几天就会有新的概念和框架出现。我们在本系列学习中,力求通过基本的学习方法来深入探究代码的本质,这样无论将来出现什么新的知识点,我们都能迅速学习并应用。小刀的水平有限,欢迎大家在…

    2026年9月1日 用户投稿
    200
  • ChatGPT怎么用_ChatGPT注册登录与基础使用教程

    答案是注册并掌握提问技巧后,ChatGPT能成为高效工具。需通过官网注册,验证邮箱和手机号,登录后可在聊天界面输入问题,利用上下文记忆、角色设定、明确指令等技巧提升回答质量,免费版适合初试,Plus版则提供GPT-4、插件、数据分析等高级功能,适合高频深度使用者。 ☞☞☞AI 智能聊天, 问答助手,…

    2026年9月1日
    200
  • 怎么在VSCode安装Pylint_VSCode配置Python代码检查工具Pylint教程

    答案是安装并配置Pylint扩展与Python包,再在VSCode中启用并自定义规则。首先安装VSCode的Pylint扩展,然后通过pip install pylint在Python环境中安装库;接着在settings.json中设置”python.linting.pylintEnab…

    2026年9月1日
    700
  • 怎么登录我的谷歌邮箱_谷歌邮箱登录步骤与安全验证方法

    怎么登录我的谷歌邮箱_谷歌邮箱登录步骤与安全验证方法怎么登录我的谷歌邮箱_谷歌邮箱登录步骤与安全验证方法怎么登录我的谷歌邮箱_谷歌邮箱登录步骤与安全验证方法怎么登录我的谷歌邮箱_谷歌邮箱登录步骤与安全验证方法

    无法登录谷歌邮箱可能因网络、账号错误或验证失败,可通过电脑端访问官网输入正确邮箱密码并完成双重验证登录;移动端需下载Gmail应用,添加账户后同步数据;支持多账户切换管理,遗忘密码可点击“忘记密码”通过绑定手机或安全问题重置;建议启用两步验证提升安全性。 如果您尝试登录您的谷歌邮箱,但无法进入账户,…

    2026年9月1日 用户投稿
    600
  • 为什么iPhone13Mini屏幕失灵如何强制重启?按音量加减后长按电源键重启

    为什么iPhone13Mini屏幕失灵如何强制重启?按音量加减后长按电源键重启为什么iPhone13Mini屏幕失灵如何强制重启?按音量加减后长按电源键重启为什么iPhone13Mini屏幕失灵如何强制重启?按音量加减后长按电源键重启为什么iPhone13Mini屏幕失灵如何强制重启?按音量加减后长按电源键重启

    先强制重启iPhone 13 Mini,若无效则充电检查,再通过电脑进入恢复模式或DFU模式修复系统,最后可尝试第三方工具解决触控失灵问题。 如果您尝试操作iPhone 13 Mini,但屏幕无响应或触控失灵,可能是系统临时卡死或软件冲突导致。以下是解决此问题的步骤: 本文运行环境:iPhone 1…

    2026年9月1日 用户投稿
    100
  • Piti插件怎样添加过渡动画效果_Piti插件添加过渡动画效果步骤

    首先启用Piti插件动画模块,再设置元素初始与目标状态,接着配置过渡时间及缓动函数,然后绑定悬停或点击等触发事件,最后导出CSS或JSON代码用于开发或在Figma中预览动画效果。 如果您在使用Piti插件进行页面元素设计时,希望增强视觉流畅性,可以通过添加过渡动画效果来实现元素状态变化的平滑呈现。…

    2026年9月1日
    1400
  • Python环境安装教程

    Python环境安装教程Python环境安装教程Python环境安装教程Python环境安装教程

    引言 通常我们将#%#$#%@%@%$#%$#%#%#$%@_23eeeb4347bdd26bfc++6b7ee9a3b755dd和java语言归为解释型语言,而对于c/c++则归为编译型语言。 安装Python解释器最新版本下载 官网下载(https://www.Python.org/) 选择最新…

    2026年9月1日 用户投稿
    400
  • Java中finally块的作用是什么 无论是否抛出异常都会执行吗

    finally块确保代码在try-catch结构中无论是否发生异常都会执行,常用于释放资源;2. 多数情况下finally会执行,包括无异常、有异常被捕获、甚至try或catch中有return语句时;3. 但在System.exit()被调用、线程被强制终止或JVM崩溃等极端情况下,finally…

    2026年9月1日
    200
  • 怎么用VSCode运行代码_VSCode代码执行与调试教程

    VSCode中运行和调试代码的核心方法包括:1. 使用内置终端手动执行命令,灵活但需重复输入;2. 通过Code Runner插件一键运行,快捷但功能有限;3. 借助语言扩展与调试器深度调试,支持断点、变量监控、调用堆栈等高级功能,适合复杂项目。配置时需安装对应语言扩展、设置解释器路径、合理使用se…

    2026年9月1日
    100

发表回复

登录后才能评论
关注微信