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 相关文章推荐
Vue3+elementui plus创建项目的方法
Dec 01 Vue.js
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 Vue.js
vue从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 Vue.js
Vue实现指令式动态追加小球动画组件的步骤
Dec 18 Vue.js
vue el-upload上传文件的示例代码
Dec 21 Vue.js
vue3+typeScript穿梭框的实现示例
Dec 29 Vue.js
Vue仿Bibibili首页的问题
Jan 21 Vue.js
vue路由实现登录拦截
Mar 24 Vue.js
vue实现可拖拽的dialog弹框
May 13 Vue.js
vue基于Teleport实现Modal组件
May 31 Vue.js
vue如何使用模拟的json数据查看效果
Mar 31 Vue.js
vue自定义右键菜单之全局实现
Apr 09 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
关于laravel 子查询 &amp; join的使用
2019/10/16 PHP
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
json格式的时间显示为正常年月日的方法
2013/09/08 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
如何利用Promises编写更优雅的JavaScript代码
2016/05/17 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
微信小程序网络请求wx.request详解及实例
2017/05/18 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
jquery自定义显示消息数量
2017/12/19 jQuery
node+koa2+mysql+bootstrap搭建一个前端论坛
2018/05/06 Javascript
javascript实现手动点赞效果
2019/04/09 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
2020/09/01 Javascript
Python 包含汉字的文件读写之每行末尾加上特定字符
2016/12/12 Python
python 使用get_argument获取url query参数
2017/04/28 Python
Django 导出 Excel 代码的实例详解
2017/08/11 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
python实现将excel文件转化成CSV格式
2018/03/22 Python
python K近邻算法的kd树实现
2018/09/06 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
安全协议书范本
2014/04/21 职场文书
校园文明标语
2014/06/13 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
2014年高中班主任工作总结
2014/11/08 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python
MySQL 十大常用字符串函数详解
2021/06/30 MySQL