Vue Draggable 实现优雅的拖拽排序
Vue Draggable 提供了:开箱即用的拖拽功能、与 Vue 生态的完美集成、高度可定制的交互体验。通过合理使用其 API 和事件系统,可以轻松实现从简单列表到复杂看板的各种交互场景。
1224 热度
408 浏览
安装与引入
bash
npm install vuedraggable
组件引入
vue
import draggable from 'vuedraggable'
export default {
components: {
draggable
}
}
基础用法
简单列表
vue
<template>
<draggable v-model="list">
<div v-for="item in list" :key="item.id">
{{ item.name }}
</div>
</draggable>
</template>
<script>
export default {
data() {
return {
list: [
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' }
]
}
}
}
</script>
手柄拖动,注意:指定的是class .handle
vue
<draggable
v-model="list"
handle=".handle"
>
<div v-for="item in list" :key="item.id">
<button class="handle">≡</button>
{{ item.name }}
</div>
</draggable>
核心配置选项
| 属性 | 类型 | 说明 |
|---|---|---|
| v-model | Array | 必需,绑定的数据数组 |
| handle | String | 指定拖动手柄的选择器 (例: .handle) |
| group | String | 定义可跨列表拖动的分组名称 |
| animation | Number | 拖动动画时长 (ms),推荐 150-300 |
| delay | Number | 长按触发拖动的延迟时间 (ms) |
| disabled | Boolean | 禁用拖动功能 |
| ghostClass | String | 拖动时占位元素的样式类 |
| chosenClass | String | 被选中元素的样式类 |
| forceFallback | Boolean | 强制使用原生实现 (解决某些 CSS 框架兼容性问题) |
回调事件 API
| 事件名 | 触发时机 | 回调参数 |
|---|---|---|
| @start | 拖动开始时 | { originalEvent, item, oldIndex } |
| @end | 拖动释放后 | { originalEvent, item, oldIndex, newIndex } |
| @add | 元素被添加到其他列表时 | { originalEvent, item, newIndex } |
| @remove | 元素从列表移除时 | { originalEvent, item, oldIndex } |
| @update | 列表顺序变化时 | { originalEvent, oldIndex, newIndex } |
| @choose | 元素被选中时 | { originalEvent, item, oldIndex } |
| @unchoose | 元素取消选中时 | { originalEvent, item, oldIndex } |
自定义视觉反馈
css
/* 拖动时样式 */
.ghost {
opacity: 0.5;
background: #c8ebfb;
}
/* 选中时样式 */
.chosen {
transform: scale(1.02);
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}

声明:Web前端小站 - 前端博客 - 王搏的个人博客|版权所有,违者必究|如未注明,均为原创
转载:转载请注明原文链接 - Vue Draggable 实现优雅的拖拽排序
评论 (0)
0/50
暂无评论,快来抢沙发吧~