vue列表拖拽排序

本文介绍了如何在Vue项目中利用vuedraggable插件进行列表的拖拽排序。首先,通过yarn或npm安装vuedraggable依赖。接着,在Vue2的页面中引入该插件,实现列表元素的动态排序功能。

描述:通过vue的插件 draggable完成列表拖拽排序功能

1、安装依赖

yarn add vuedraggable

npm i -S vuedraggable

2、vue2 页面中引入

<template>
	<div>
    <div @click="commitSort">确定排序</div>
    <draggable v-model="dragList" chosen-class="chosen" force-fallback="true" group="people" animation="1000" @update="onUpdate" @end="onEnd">
            <transition-group>
                <div class="item" v-for="element in myArray" :key="element.id">{
  
  {element.name}}</div>
            </transition-group>
        </draggable>
  </div>
</template>

<script>
  import vuedraggable from 'vuedraggable'
  export default{
    data(){
      return {
        dragList:[
          { people: 'cn', id: 1, sort:0, name: 'www.itxst.com' },
          { people: 'cn', id: 2, sort:1, name: 'www.baidu.com' },
          { people: 'cn', id: 3, sort:2,name: 'w
Vue 3 中实现列表拖拽排序功能,可以通过结合 HTML5 原生的拖放 API(Drag and Drop API)来完成。这种方式能够满足基本的拖拽交互需求,并且可以在不引入额外依赖的情况下实现轻量级功能。 以下是一个基于 Vue 3 Composition API 的实现示例,包括数据绑定、事件监听和 DOM 操作。 ### 列表拖拽排序的基本实现 ```vue <template> <div> <ul> <li v-for="(item, index) in items" :key="item.id" draggable="true" @dragstart="onDragStart(index)" @dragover.prevent="onDragOver(index)" @drop="onDrop(index)" @dragend="onDragEnd" > {{ item.text }} </li> </ul> </div> </template> <script setup> import { ref } from 'vue'; const items = ref([ { id: 1, text: '项目 1' }, { id: 2, text: '项目 2' }, { id: 3, text: '项目 3' }, { id: 4, text: '项目 4' } ]); let draggedIndex = null; const onDragStart = (index) => { draggedIndex = index; }; const onDragOver = (index) => { // 阻止默认行为以允许拖放 }; const onDrop = (index) => { if (draggedIndex !== null && draggedIndex !== index) { const movedItem = items.value.splice(draggedIndex, 1)[0]; items.value.splice(index, 0, movedItem); } }; const onDragEnd = () => { draggedIndex = null; }; </script> <style scoped> ul { list-style-type: none; padding: 0; } li { padding: 10px; margin: 5px 0; background-color: #f0f0f0; cursor: move; } </style> ``` ### 功能说明 - **`draggable="true"`**:设置列表项为可拖拽元素。 - **`@dragstart`**:当用户开始拖动元素时触发,记录当前拖拽项的索引。 - **`@dragover`**:在拖拽过程中持续触发,通过 `@dragover.prevent` 可以阻止默认行为,使得 `drop` 事件可以被触发[^3]。 - **`@drop`**:当用户释放鼠标完成拖放时触发,根据索引交换数据位置,实现排序。 - **`@dragend`**:拖拽结束时重置拖拽索引。 ### 进阶功能建议 - **过渡动画**:可以通过 Vue 的 `<TransitionGroup>` 组件为列表项添加动画效果。 - **移动端支持**:如果需要更好的移动端支持,建议使用第三方库如 [SortableJS](https://sortablejs.com/) 或其 Vue 封装组件 `vuedraggable`。 - **滚动支持**:若列表区域存在滚动条并需要支持“自动滚动”,可以通过监听 `dragover` 事件中的鼠标位置,结合 `scrollTop` 实现自动滚动逻辑[^2]。 ### 数据同步与交互优化 在拖拽过程中,数据的更新是即时的,可以监听 `drop` 事件后将当前排序结果通过 API 同步至服务端,确保数据一致性。此外,还可以通过 `v-model` 实现双向绑定,或者使用 Vuex/Pinia 状态管理库进行状态持久化。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值