0

0

html5布局代码拖拽排序布局实现_html5布局代码拖拽排序法【步骤】

蓮花仙者

蓮花仙者

发布时间:2026-01-28 16:27:10

|

536人浏览过

|

来源于php中文网

原创

HTML5拖拽排序需配对使用dragstart/drop事件,dragover中必须e.preventDefault();容器要监听dragover/drop;用insertBefore实现插入位置;移动端Safari不支持,需降级方案;dataTransfer仅传字符串,推荐用dataset存ID。

html5布局代码拖拽排序布局实现_html5布局代码拖拽排序法【步骤】

HTML5 dragstartdrop 事件必须配对使用

只监听 dragstart 没用,浏览器默认会阻止 drop 行为。必须在 dragover 事件里调用 e.preventDefault(),否则拖拽到目标区域时鼠标显示“禁止”图标,drop 根本不会触发。

常见错误是只给列表项加 draggable="true",却忘了给容器(如

    )绑定 dragoverdrop 监听器。

    • 是起点,但不是全部
    • 目标容器需显式设置 ondragover="e.preventDefault()" 或 JS 中监听并阻止默认行为
    • drop 事件里要用 e.dataTransfer.getData('text/plain') 取数据——但更推荐用自定义类型如 'text/id' 避免冲突

    insertBefore 实现视觉插入而非简单 appendChild

    直接 appendChild 只能拖到末尾,用户想要的是“插到某两项之间”。关键在于:在 drop 事件中,根据鼠标位置判断该插在哪个兄弟元素之前。

    实操建议是监听 dragenterdragover 时动态计算光标相对于每个

  • 的垂直偏移,标记当前“插入点”,再在 drop 时调用 parent.insertBefore(newItem, referenceElement)

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

    Designs.ai
    Designs.ai

    AI设计工具

    下载
    • 不要依赖 e.target —— 它可能是子元素(如图标、文字),应向上找最近的
    • getBoundingClientRect() 算出每个
    • 的上下边界,对比 e.clientY 判断插入位置
    • 插入前先 remove() 拖拽项本身,避免重复渲染

    移动端 Safari 不支持原生 drag API

    iOS / iPadOS 上的 Safari 完全禁用 draggable 属性和相关事件,这是硬限制,不是 bug。强行启用无效,也不建议用 touchmove + transform 自己模拟——滚动冲突、惯性、缩放都会导致体验崩坏。

    如果必须支持移动拖拽排序,务实做法是:检测 'ontouchstart' in window,降级为点击切换顺序按钮(↑↓)、长按弹出位置选择菜单,或改用第三方库如 sortablejs(它内部已处理 UA 判断和 touch fallback)。

    • 别在 iOS 上调试 dragstart——控制台不会报错,但事件根本不会发出
    • sortablejsforceFallback: true 可强制启用非 drag 模式,适合测试兼容路径
    • 若用 Vue/React,优先选 vuedraggablereact-sortable-hoc,它们封装了平台差异

    dataTransfer 只能传字符串,别试图塞对象

    e.dataTransfer.setData('text/plain', JSON.stringify(data)) 看似可行,但跨 iframe 或不同 origin 时可能被截断;更严重的是,如果拖拽源和目标不在同一 DOM 树(比如从侧边栏拖进主列表),getData 可能返回空字符串。

    真正可靠的做法是:不依赖 dataTransfer 传业务数据,而用 DOM 元素自身属性记录 ID 或索引,例如 item.dataset.id = '123'drop 时直接读取 e.target.closest('li').dataset.id

    • dataTransfer.effectAllowed = 'move' 可提示用户这是移动操作(显示“+”或“→”图标),但仅限桌面 Chrome/Firefox
    • 不要在 dragstart 里修改元素样式(如 opacity: 0.5)后忘记恢复——dragend 可能不触发(比如拖出窗口)
    • 排序完成后,记得同步更新对应的数据数组,否则 React/Vue 的响应式更新会失效
    实际拖拽排序最易卡住的地方,往往不是逻辑,而是 dragover 阻止默认行为漏写、移动端无 fallback、或者 dataTransfer 传参误以为能跨上下文共享状态。
  • 热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    json数据格式
    json数据格式

    JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

    418

    2023.08.07

    json是什么
    json是什么

    JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

    535

    2023.08.23

    jquery怎么操作json
    jquery怎么操作json

    操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

    311

    2023.10.13

    go语言处理json数据方法
    go语言处理json数据方法

    本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

    77

    2025.09.10

    html5动画制作有哪些制作方法
    html5动画制作有哪些制作方法

    html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

    511

    2023.10.23

    HTML与HTML5的区别
    HTML与HTML5的区别

    HTML与HTML5的区别:1、html5支持矢量图形,html本身不支持;2、html5中可临时存储数据,html不行;3、html5新增了许多控件;4、html本身不支持音频和视频,html5支持;5、html无法处理不准确的语法,html5能够处理等等。想了解更多HTML与HTML5的相关内容,可以阅读本专题下面的文章。

    436

    2024.03.06

    html5从入门到精通汇总
    html5从入门到精通汇总

    想系统掌握HTML5开发?本合集精选全网优质学习资源,涵盖免费教程、实战项目、视频课程与权威电子书,从基础语法到高级特性(Canvas、本地存储、响应式布局等)一应俱全,适合零基础小白到进阶开发者,助你高效入门并精通HTML5前端开发。

    69

    2025.12.30

    html5新老标签汇总
    html5新老标签汇总

    HTML5在2026年持续优化网页语义化与交互体验,不仅引入了如<header>、<nav>、<article>、<section>、<aside>、<footer>等结构化标签,还新增了<video>、<audio>、<canvas>、<figure>、<time>、<mark>等增强多媒体与

    104

    2025.12.30

    俄罗斯Yandex引擎入口
    俄罗斯Yandex引擎入口

    2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

    158

    2026.01.28

    热门下载

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

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Vue 教程
    Vue 教程

    共42课时 | 7.3万人学习

    Vue3.x 工具篇--十天技能课堂
    Vue3.x 工具篇--十天技能课堂

    共26课时 | 1.5万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号