Vue.Draggable实现交换位置


Posted in Vue.js onApril 07, 2022

Vue.Draggable实现交换位置,供大家参考,具体内容如下

前言

最近的一个项目接触了到了Vue.Draggable这个组件。不过我们的需求和Vue.Draggable这个组件所支持的有些出入。这个拖拽组件属于插入的模式。一但拖拽的是相间的元素(中间隔着几个元素),那么拖拽元素就会占据被拖拽元素的位置,而后续元素位置逐级向下减一。

如下图:

c拖拽到a的位置,表现为c插入到a的前面。所以变为了cab。

Vue.Draggable实现交换位置

需求

实现交换而非插入及上图要变成(cba)

实现方式

想要阻止它插入是不可能,我们只能等它插入结束后对我们想要的元素进行操作。比如拿到头和尾部两个索引。交换他们在数组中的位置。需要注意的是,因为拖拽时已经改变数组里面元素的位置了,因此我们需要在拖拽前copy一个和原数组一样的数组。

实现步骤

1、 选择一个适合自己的方法,需要能够获得开始索引和结束索引
end,sort,update都可以

Vue.Draggable实现交换位置

2、深拷贝

copyList(){
   this.copyList=this.list.slice(0)
}

3、通过索引来操作copyList数组位置

const item=this.copyList[oldIndex]
this.copyList.splice(oldIndex, 1, this.copyList[newIndex]);
this.copyList.splice(newIndex, 1, item);

4、将copyList赋值给list,并在结尾处获得新的拷贝的copyList

this.list=this.copyList
this.copyList = this.list.slice(0);

全部代码

import draggable from "@/vuedraggable";
let id = 1;
export default {
  name: "simple",
  display: "Simple",
  order: 0,
  components: {
    draggable,
  },
  data() {
    return {
      enabled: true,
      list: [{ name: "a" }, { name: "b" }, { name: "c" }],
      dragging: false,
      index: 0,
      copyList: [],
    };
  },
  computed: {
    draggingInfo() {
      return this.dragging ? "under drag" : "";
    },
  },
  created() {
    this.copyList = this.list.slice(0);
  },
  methods: {
    add: function () {
      this.list.push({ name: "Juan " + id, id: id++ });
    },
    replace: function () {
      this.list = [{ name: "Edgard", id: id++ }];
    },
    end({ oldIndex, newIndex }) {
      const item = this.copyList[oldIndex];
      this.copyList.splice(oldIndex, 1, this.copyList[newIndex]);
      this.copyList.splice(newIndex, 1, item);
      this.list = this.copyList;
      this.copyList = this.list.slice(0);
    },
  }
};
<draggable
        :list="list"
        :disabled="!enabled"
        class="list-group"
        ghost-class="ghost"
        :move="checkMove"
        @end="end"
        @sort="sort"
        @update="update"
        @start="start"
      >
  <div class="list-group-item" v-for="element in list" :key="element.name">{{ element.name }}</div>
</draggable>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
vue+vant实现购物车全选和反选功能
Nov 17 Vue.js
vue在图片上传的时候压缩图片
Nov 18 Vue.js
vue开发chrome插件,实现获取界面数据和保存到数据库功能
Dec 01 Vue.js
vue 使用rules对表单字段进行校验的步骤
Dec 25 Vue.js
vue常用高阶函数及综合实例
Feb 25 Vue.js
Vue SPA 首屏优化方案
Feb 26 Vue.js
vue-cropper插件实现图片截取上传组件封装
May 27 Vue.js
springboot+VUE实现登录注册
May 27 Vue.js
Vue-Element-Admin集成自己的接口实现登录跳转
Jun 23 Vue.js
Vue如何清空对象
Mar 03 Vue.js
一起来看看Vue的核心原理剖析
Mar 24 Vue.js
vue-cil之axios的二次封装与proxy反向代理使用说明
Apr 07 Vue.js
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
vue cli4中mockjs在dev环境和build环境的配置详情
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 #Vue.js
vue3使用vuedraggable实现拖拽功能
vue整合百度地图显示指定地点信息
vue中使用mockjs配置和使用方式
VUE使用draggable实现组件拖拽
Apr 06 #Vue.js
You might like
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
jQuery bind事件使用详解
2011/05/05 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
2014/05/11 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
2016/06/23 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
JavaScript无操作后屏保功能的实现方法
2017/07/04 Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
2018/01/16 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
python统计日志ip访问数的方法
2015/07/06 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
python2.7实现FTP文件下载功能
2018/04/15 Python
VSCode配合pipenv搞定虚拟环境的实现方法
2020/05/17 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
日本食品网上商店:JaponShop.com
2017/11/28 全球购物
.net面试题
2015/12/22 面试题
简历中自我评价分享
2013/10/09 职场文书
财务人员担保书
2014/05/13 职场文书
大学课外活动总结
2014/07/09 职场文书
新颖的化妆品活动方案
2014/08/21 职场文书
婚庆答谢词大全
2015/09/29 职场文书
微软Win11什么功能最惊艳? Windows11新功能特性汇总
2021/11/21 数码科技
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL
Django框架之路由用法
2022/06/10 Python