当前位置: 首页 > news >正文

Vue使用Sortablejs拖拽排序 视图显示与数据不一致、拖拽结束后回跳问题

官网:Sortable.js中文网

  注意:拖拽一定不能用index作为key,也不建议用item,否则会出现视图显示与数据不一致/回跳,建议用唯一值ID;


安装

npm install sortablejs --save

引入

import GapLine from '@/components/GapLine.vue';

使用

<template><!-- 菜单分组容器,ref用于获取DOM节点 --><view class="menu-group group-list" ref="sortGroupRef"><!-- 遍历显示菜单项,使用item作为key(实际开发建议用唯一ID) --><view class="menu-item flex-y-center" v-for="(item, index) in showList" :key="item"  <!-- 注意:拖拽一定不能用index作为key,否则会回跳 -->><!-- 菜单项内容 -->{{ item }}</view></view>
</template><script>
// 引入拖拽排序库
import Sortable from 'sortablejs';export default {data() {return {// 菜单数据列表showList: ['自建菜单1', '自建菜单2', '自建菜单3', '自建菜单4'],}},// 生命周期:页面渲染完成时onReady() {// 等待下一个DOM更新周期,确保DOM已渲染this.$nextTick(() => {// 获取容器DOM节点(注意:uni-app中需要通过$el获取原生DOM)const sortEl = this.$refs.sortGroupRef.$el;// 初始化Sortable拖拽实例new Sortable(sortEl, {group: 'group-list',     // 定义可拖拽组(允许多列表间拖拽)draggable: '.menu-item', // 指定可拖拽的子元素类名handle: '.sort-button',  // 指定拖拽手柄元素类名(需在template中添加对应元素)animation: 200,          // 拖拽动画时长(ms)// 拖拽结束回调onEnd: ({ newIndex, oldIndex }) => {// 获取被拖拽的元素const item = this.showList[oldIndex];// 从原位置删除元素this.showList.splice(oldIndex, 1);// 在新位置插入元素this.showList.splice(newIndex, 0, item);},});});},
}
</script>

 注意:拖拽一定不能用index作为key,也不建议用item,否则会回跳,建议用唯一值ID;

相关文章:

  • excel如何做相关系数分析
  • 【网络原理】TCP异常处理(二):连接异常
  • 脑机接口:重塑人类未来的神经增强革命
  • HarmonyOS NEXT 诗词元服务项目开发上架全流程实战(二、元服务与应用APP签名打包步骤详解)
  • 什么是 MCP?AI 应用的“USB-C”标准接口详解
  • CentOS环境下搭建seata(二进制、MySQL)
  • [计算机网络]物理层
  • Nginx核心功能与LNMP部署
  • 主流微前端框架比较
  • pytest-前后置及fixture运用
  • Mybatis-plus代码生成器的创建使用与详细解释
  • Nginx部署与源码编译构建LAMP
  • SVMSPro平台获取Websocket视频流规则
  • ComfyUI 学习笔记,案例1:2_pass_txt2img
  • CMD与PowerShell:Windows命令行工具的对比与使用指南
  • 4月29号
  • w233大学生就业需求分析系统设计与实现
  • 非凸科技受邀出席AI SPARK活动,共探生成式AI驱动金融新生态
  • 面向网络安全的开源 大模型-Foundation-Sec-8B
  • 力扣——206.反转链表倒序输出链表
  • 金砖国家外长会晤发表主席声明,强调南方国家合作
  • 石家庄:城市更新,生活向美
  • 来伊份一季度净利减少近八成,今年集中精力帮助加盟商成功
  • 长三角议事厅·周报|长三角游戏出海,关键在“生态输出”
  • 伊朗港口爆炸已致46人死亡
  • 早睡1小时,变化有多惊人?第一个就没想到