文章目录
- 横向对比表
- [ES Drager](#ES Drager)
-
- [Drager API](#Drager API)
-
- [Drager 属性](#Drager 属性)
- [Drager 事件](#Drager 事件)
- [Drager 插槽](#Drager 插槽)
- vue-draggable-plus
- Grid-Layout-Plus
- [Fluid DnD](#Fluid DnD)
- 其他推荐
- 如何选择?
- 注意事项
横向对比表
库名称 | 框架支持 | 核心功能 | 学习曲线 | 社区活跃度 |
---|---|---|---|---|
ES Drager | Vue 3 | 高级图形操作 | 中 | ★★★★☆ |
vue-draggable-plus | Vue 3 | 列表拖拽克隆排序 | 低 | ★★★☆☆ |
Grid-Layout-Plus | Vue 3/React | 响应式网格 | 高 | ★★★★☆ |
Fluid DnD | 跨框架 | 动画交互 | 中 | ★★★☆☆ |
vue-draggable | vue2 | 列表拖拽克隆排序 | 中 | ★☆☆ ☆☆ |
vue-grid-layout | vue2 | 响应式网格 | 中 | ★☆☆ ☆☆ |
ES Drager
🌈 简介 :
ES Drager 是一个轻量级的拖拽组件库,支持 Vue 3,提供基础的拖拽功能和高度的自定义能力。
特点:
- 支持拖拽、缩放、旋转等操作。
- 提供丰富的 API 和事件回调。
- 网格拖拽缩放
- 拖拽编辑器
- 轻量级,性能优秀。
资源:


ES Drager | |||
---|---|---|---|
Draggable | Resizable | Rotatable | skewable |
![]() |
![]() |
![]() |
![]() |
Drager API
Drager 属性
属性名 | 说明 | 类型 | 默认 |
---|---|---|---|
tag | component组件的is属性 | [string] | div |
type | 类型,rect , text , image |
[string] | rect |
width | 宽度 | [number] | 100 |
height | 高度 | [number] | 100 |
left | 横坐标偏移 | [number] | 0 |
top | 纵坐标偏移 | [number] | 0 |
angle | 旋转角度 | [number] | 0 |
skew | 倾斜角度 | [Array] | [0, 0] |
color | 颜色 | [string] | #3a7afe |
resizable | 是否可缩放 | [boolean] | true |
rotatable | 是否可旋转 | [boolean] | - |
skewable v1.3.0 |
是否可倾斜 | [boolean] | - |
boundary | 是否判断边界(最近定位父节点,考虑性能谨慎使用。只支持移动,缩放在v1.3后不支持) | [boolean] | - |
disabled | 是否禁用 | [boolean] | - |
minWidth | 最小宽度 | [number] | - |
minHeight | 最小高度 | [number] | - |
maxWidth | 最大宽度 | [number] | - |
maxHeight | 最大高度 | [number] | - |
selected | 控制是否选中 | [boolean] | - |
checkCollision | 是否开启碰撞检测 | [boolean] | - |
snapToGrid | 开启网格 | [boolean] | - |
gridX | 网格X大小 | [number] | 50 |
gridY | 网格Y大小 | [number] | 50 |
snap | 开启吸附 | [boolean] | - |
snapThreshold | 吸附阈值 | [number] | 10 |
markline | 辅助线(可自定义) | [boolean][Function] | - |
extraLines | 添加除了es-drager元素以外的对齐线,例如添加中心点对齐(可参考) | [Function] | |
scaleRatio | 缩放比 | [number] | 1 |
disabledKeyEvent | 禁用方向键移动 | [boolean] | - |
border | 是否显示边框 | [boolean] | true |
aspectRatio | 宽高缩放比 | [number] | - |
equalProportion | 宽高等比缩放(该属性和aspectRatio互斥,同时使用会存在问题) | [boolean] | - |
resizeList | 显示的缩放handle列表,top , bottom , left , right , top-left , top-right , bottom-left , bottom-right |
[string[]] | - |
Drager 事件
事件名 | 说明 | 类型 |
---|---|---|
change | 位置、大小改变 | [Function](dragData) => void |
drag | 拖拽中 | [Function](dragData) => void |
drag-start | 拖拽开始 | [Function](dragData) => void |
drag-end | 拖拽结束 | [Function](dragData) => void |
resize | 缩放中 | [Function](dragData) => void |
resize-start | 缩放开始 | [Function](dragData) => void |
resize-end | 缩放结束 | [Function](dragData) => void |
rotate | 旋转中 | [Function](dragData) => void |
rotate-start | 旋转开始 | [Function](dragData) => void |
rotate-end | 旋转结束 | [Function](dragData) => void |
skew | 倾斜中 | [Function](dragData) => void |
skew-start | 倾斜开始 | [Function](dragData) => void |
skew-end | 倾斜结束 | [Function](dragData) => void |
focus | 获取焦点/选中 | [Function](selected) => void |
blur | 失去焦点/非选中 | [Function](selected) => void |
- dragData 类型
javascript
export type DragData = {
width: number
height: number
left: number
top: number
angle: number
skew: number[],
}
Drager 插槽
插槽名 | 说明 |
---|---|
default | 自定义默认内容 |
resize | 缩放handle |
rotate | 旋转handle |
skew | 倾斜handle |
vue-draggable-plus

资源:
📌 核心定位 :
专为 Vue 3 设计的列表拖拽排序解决方案,基于 Sortable.js 深度优化,适用于列表拖拽排序等场景。
特点:
- 支持列表拖拽排序。
- 兼容 Vue 3 的 Composition API。
- 配置灵活,易于集成。
🎯 典型场景:
- 任务看板(Kanban)
- 表格行排序
- 嵌套列表重组
🛠️ 技术特性:
javascript
// 示例:基础用法
import { Draggable } from 'vue-draggable-plus'
<Draggable
v-model="list"
animation="150"
handle=".handle"
@end="onDragEnd"
/>
Grid-Layout-Plus

简介 :
Grid-Layout-Plus 是一个强大的网格布局拖拽库,适用于 Vue 3,支持动态调整布局和响应式设计。
特点:
- 支持网格拖拽和动态调整布局。
- 提供丰富的布局配置选项。
- 响应式设计,适配不同屏幕尺寸。
资源:
Fluid DnD
简介 :
Fluid DnD 是一个流畅的拖拽库,支持 Vue 3,专注于提供自然的拖拽体验和动画效果。
特点:
- 提供流畅的拖拽动画。
- 支持多种拖拽场景(列表、网格等)。
- 易于配置和使用。
资源:
其他推荐
-
SortableJS
- 官网:https://sortablejs.github.io/Sortable/
- GitHub:https://github.com/SortableJS/Sortable
- 适用于原生 JavaScript 和多种框架的拖拽排序库。
-
React DnD
- 官网:https://react-dnd.github.io/react-dnd/
- GitHub:https://github.com/react-dnd/react-dnd
- 适用于 React 的拖拽库,功能强大且灵活。
-
Draggable
- 官网:https://shopify.github.io/draggable/
- GitHub:https://github.com/Shopify/draggable
- 提供多种拖拽交互模式,适合复杂场景。
如何选择?
- Vue 3 项目:推荐 ES Drager、vue-draggable-plus 或 Grid-Layout-Plus。
- Vue 2 项目:推荐 vue-draggable、vue-grid-layout 。
- React 项目:推荐 React DnD。
- 原生 JavaScript 项目:推荐 SortableJS 或 Draggable。
- 需要网格布局:优先选择 Grid-Layout-Plus。
- 需要流畅动画:优先选择 Fluid DnD。
注意事项
- 根据项目需求选择合适的库,避免过度依赖。
- 注意库的维护状态和社区支持情况。
- 测试性能,确保拖拽操作不会影响页面流畅度。