讲师中心 微信公众号
AI工具推荐 视频效率加速

Vue.js 实现一个基于 Vue 的拖拽布局组件

落晨大大_2677

落晨大大_2677

发布时间:2026-07-23 15:38:07

|

281人浏览过

|

来源于php中文网

原创

Vue.js 实现拖拽布局组件的核心是结合 draggable、droppable 与响应式状态管理,利用 HTML5 拖放 API 或轻量逻辑,通过 dataTransfer 传递 ID、:key 绑定唯一标识、preventDefault 禁用默认行为,并用 reactive 管理嵌套或扁平化布局数据,支持跨容器排序与视觉反馈。

vue.js 实现一个基于 vue 的拖拽布局组件

Vue.js 实现拖拽布局组件,核心在于结合可拖拽区域(draggable)、可放置容器(droppable)与响应式状态管理。不依赖第三方 UI 库也能完成,关键在合理使用原生 HTML5 拖放 API 或更轻量的 drag-and-drop 逻辑 + Vue 响应式更新。

支持拖拽的组件结构设计

每个可拖拽模块(如卡片、面板)需标记 draggable="true",并绑定 @dragstart 和 @dragend;目标容器(如网格区域、列区)监听 @dragover、@dragenter、@drop。Vue 中用 dataTransfer 传递唯一标识(如 item.id),避免直接传对象或 DOM 节点。

  • 拖拽项用 :key 绑定唯一 ID,确保列表重排时 Vue 正确更新 DOM
  • 禁用默认拖放行为:所有监听函数中调用 event.preventDefault()
  • 通过 event.dataTransfer.setData('text/plain', itemId) 传递数据
  • 放置时用 event.dataTransfer.getData('text/plain') 获取 ID,再更新数据源

响应式布局状态管理

布局数据建议用嵌套数组或对象描述结构,例如按“行-列-组件”组织,或扁平化 list + parentId / order 字段。每次拖放后只修改对应项的 parentId 和 index,触发 Vue 自动重渲染。

Wjs Uploading Video
Wjs Uploading Video

将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。

下载
  • 推荐使用 ref 或 reactive 管理布局数据,避免直接 push/splice 导致响应失效
  • 拖入新容器时,先从原数组删除该 item,再插入目标位置(可用 splice(targetIndex, 0, item))
  • 支持跨容器排序:监听 @dragover 动态添加高亮 class,提示可放置位置

视觉反馈与用户体验优化

纯功能实现容易,但用户需要明确的拖拽引导。可通过 CSS 类控制透明度、边框、阴影,配合 Vue 的 v-if /

 动态切换。</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/cb6835dc7db1" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">前端免费学习笔记(深入)</a>”;</p>
<ul>
  <li>拖拽中给源元素加 <code>opacity: 0.6
,目标区域加 border: 2px dashed #409eff

  • 在目标容器内显示插入线(insert line):监听 @dragover 计算鼠标 Y 坐标,动态渲染伪元素或占位 div
  • 拖出容器范围时移除高亮,防止误操作
  • 拖放成功后播放微动效(如 scale 变化),增强操作确认感
  • 扩展性与边界处理

    实际项目中常需限制拖拽类型(如仅允许某类组件进入特定区域)、禁止嵌套、或支持撤销/快照。这些逻辑应在 @drop 钩子中集中判断。

    • 提前校验:if (targetArea.type !== 'allowed' || item.type !== 'compatible') return
    • 记录历史状态:每次变更前深拷贝当前 layout,存入数组用于 undo/redo
    • 移动端适配:HTML5 拖放不兼容 iOS Safari,可降级为 touchmove + translate 模拟拖拽
    • 性能注意:大量组件时避免在 @dragover 中频繁计算 layout,用 throttle 或 requestAnimationFrame 节流

    热门AI工具

    更多
    豆包大模型

    豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

    DeepSeek

    DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

    UpDream
    UpDream Hot

    一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

    Seko
    Seko Hot

    一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

    立刻MV
    立刻MV Hot

    立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

    VibeKnow
    VibeKnow Hot

    一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

    PixTV
    PixTV Hot

    PixTV是一款面向AIGC内容创作的AI视频生成工具。

    AionClaw
    AionClaw Hot

    AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

    WorkBuddy

    一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

    相关专题

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

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

    2543

    2023.08.11

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

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

    5483

    2023.10.09

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

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

    6510

    2024.03.19

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

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

    6138

    2024.03.22

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

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

    863

    2024.05.22

    vue2.0和3.0区别
    vue2.0和3.0区别

    vue2.0和3.0区别:vue2的响应式原理是利⽤“Object.defineProperty()”对数据进⾏劫持结合发布订阅模式的⽅式来实现,vue3中使⽤了es6的proxy API对数据代理,实现对数据的监控。本专题为大家提供vue2.0和3.0区别的相关的文章、下载、课程内容,供大家免费下载体验。

    1694

    2023.07.17

    vue3的生命周期有哪些
    vue3的生命周期有哪些

    vue3的生命周期:1、beforecreate;2、created;3、beforemount;4、mounted;5、beforeupdate;6、updated;7、beforedestroy;8、destroyed;9、activated;10、deactivated等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    12122

    2024.02.23

    Vue3组合式API与组件开发实战
    Vue3组合式API与组件开发实战

    本专题讲解 Vue 3 组合式 API 的核心概念与应用技巧,深入分析响应式系统、生命周期管理、组件设计与复用策略。通过完整项目案例,指导前端开发者实现高性能、结构清晰的 Vue 应用,提升开发效率与代码可维护性。

    316

    2026.02.10

    OpenJDK JVM参数怎么调优
    OpenJDK JVM参数怎么调优

    Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

    60

    2026.10.16

    热门下载

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

    精品课程

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

    共42课时 | 17.2万人学习

    国外Web开发全栈课程全集
    国外Web开发全栈课程全集

    共12课时 | 1.4万人学习

    Vue.js 微实战--十天技能课堂
    Vue.js 微实战--十天技能课堂

    共18课时 | 1.7万人学习

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

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn