欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > Vue3 中使用 vuedraggable 实现拖拽排序功能,分组拖拽

Vue3 中使用 vuedraggable 实现拖拽排序功能,分组拖拽

2025/11/5 14:13:06 来源:https://blog.csdn.net/weixin_45563734/article/details/146520714  浏览:    关键词:Vue3 中使用 vuedraggable 实现拖拽排序功能,分组拖拽

Vue3 中使用 vuedraggable 实现拖拽排序功能,分组拖拽

  1. 安装draggable
 npm install vuedraggable@next --save
  1. 基础用法示例
<template><div class="app-container"><draggable v-model="list" item-key="id":group="{ name: 'items' }"@end="handleDragEnd"><template #item="{ element }"><div class="item-card"><div class="item-title">{{ element.name }}</div><div class="item-content">{{ element.description }}</div></div></template></draggable></div>
</template><script setup>
import { ref } from 'vue';
import draggable from 'vuedraggable';// 列表数据
const list = ref([{ id: 1, name: '项目1', description: '描述1' },{ id: 2, name: '项目2', description: '描述2' },{ id: 3, name: '项目3', description: '描述3' }
]);// 拖拽结束事件
const handleDragEnd = (evt) => {const { newIndex, oldIndex } = evt;console.log('从位置' + oldIndex + '移动到' + newIndex);
};
</script><style scoped>
.item-card {border: 1px solid #dcdfe6;border-radius: 4px;padding: 15px;margin-bottom: 10px;background: #fff;cursor: move;
}.item-title {font-weight: bold;margin-bottom: 8px;
}.item-content {color: #666;
}
</style>
  1. 重要属性说明
  • v-model : 绑定数据源
  • item-key : 项目的唯一标识
  • group : 分组名称,相同组名的可以互相拖拽
  • @end : 拖拽结束事件
  • @start : 开始拖拽事件
  • @change : 顺序改变事件
  1. 分组拖拽
<template><div class="group-container"><div v-for="group in groups" :key="group.id" class="group"><h3>{{ group.name }}</h3><draggable v-model="group.items":group="{ name: 'items' }"item-key="id"@end="(evt) => handleDragEnd(evt, group)"><template #item="{ element }"><div class="item-card">{{ element.name }}</div></template></draggable></div></div>
</template><script setup>
import { ref } from 'vue';
import draggable from 'vuedraggable';const groups = ref([{id: 1,name: '分组1',items: [{ id: 1, name: '项目1' },{ id: 2, name: '项目2' }]},{id: 2,name: '分组2',items: [{ id: 3, name: '项目3' },{ id: 4, name: '项目4' }]}
]);const handleDragEnd = (evt, group) => {const { newIndex, oldIndex } = evt;console.log(`在分组 ${group.name} 中从位置 ${oldIndex} 移动到 ${newIndex}`);
};
</script><style scoped>
.group-container {display: flex;gap: 20px;
}.group {flex: 1;padding: 15px;background: #f5f7fa;border-radius: 4px;
}.item-card {background: white;padding: 10px;margin: 5px 0;border-radius: 4px;cursor: move;
}
</style>
  1. 注意事项
  • 确保每个拖拽项都有唯一的 key
  • 使用 @end 事件而不是 @change 事件来处理排序结果
  • 如果需要在拖拽时保存滚动位置,可以在 @start 事件中记录位置
  • 组件卸载时注意清理相关事件监听
  1. 日常整理!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词