Vue 3 中的拖拽排序功能实现

Vue 3 中的拖拽排序功能实现

在Web开发中,拖拽排序是一个常见且实用的功能,它允许用户通过拖动元素来重新排列它们的位置。Vue 3,作为现代JavaScript框架的佼佼者,提供了强大的响应式系统和组件化开发能力,使得实现这样的功能变得既简单又高效。今天,我们将通过一个简单的Vue 3 Demo来演示如何实现拖拽排序功能。

效果如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


准备工作

首先,确保你已经安装了Vue 3环境。你可以使用Vue CLI、Vite或其他现代前端构建工具来搭建项目。在这个Demo中,我们将直接在一个Vue组件中实现拖拽排序功能。

实现步骤

1. 定义数据

在Vue组件的<script setup>部分,我们首先需要定义一组问题和一个用于记录当前被拖拽元素索引的响应式引用。

<script setup>
import {
    ref } from 'vue';

const questions = ref([
  {
    id: 1, text: '问题 1' },
  {
    id: 2, text: '问题 2' },
  {
    id: 3, text: '问题 3' },
  {
    id: 4, text: '问题 4' }
]);

const draggingIndex = ref(-1); // 被拖拽元素的索引
</script>

2. 模板部分

在模板中,我们使用v-for指令来渲染问题列表,并为每个列表项添加拖拽相关的事件监听器和属性。

<template>
  <div>
    
Vue3中,使用Sortable库来实现表格(table)的拖拽排序功能非常方便。Sortable是一个强大的JavaScript库,用于创建可交互的拖放排序功能。以下是使用Sortable的主要步骤: 1. 安装Sortable库: 首先需要安装`@Sortablejs/sortablejs`库,可以使用npm或yarn命令行工具: ```bash npm install @sortablejs/sortablejs ``` 2. 引入并配置Sortable: 在你的组件文件中,引入Sortable并设置其选项: ```javascript import { Sortable } from &#39;@sortablejs/react&#39;; import SortableJS from &#39;sortablejs&#39;; // ... export default { setup() { const items = [ // 这里是你表格数据的对象数组,每个对象都有一个用于排序的键 { id: 1, name: &#39;Item 1&#39; }, { id: 2, name: &#39;Item 2&#39; }, // ... ]; // 初始化Sortable实例,传入items和排序规则 const sortableItems = Sortable.create(items, { group: &#39;__item__&#39;, // 设置排序组名,防止跨元素拖动 animation: 150, // 动画时间 onEnd: ({ newIndex }) => { // 排序完成后更新数据状态 this.items = items.slice().sort((a, b) => a.id - b.id); } }); return { sortableItems, items }; } } ``` 3. 更新HTML模板: 在模板中,绑定Sortable到表格行上: ```html <table> <tbody> <tr v-for="(item, index) in sortableItems.items" :key="item.id"> <td>{{ item.name }}</td> <!-- 或其他列 --> <td @mousedown.prevent> <draggable-item :item="item" index="index"></draggable-item> </td> </tr> </tbody> </table> ``` 4. `draggable-item`组件: 这个组件负责拖拽行为,并传递给Sortable处理: ```html <template> <div class="draggable" :data-id="item.id"> {{ item.name }} <button @dragstart.prevent>Drag</button> </div> </template> <script> export default { props: [&#39;item&#39;, &#39;index&#39;] }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jieyucx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值