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 相关文章推荐
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
vue实现购物车的小练习
Dec 21 Vue.js
vue+element table表格实现动态列筛选的示例代码
Jan 14 Vue.js
vue使用过滤器格式化日期
Jan 20 Vue.js
Vue ​v-model相关知识总结
Jan 28 Vue.js
关于vue中如何监听数组变化
Apr 28 Vue.js
Vue项目中如何封装axios(统一管理http请求)
May 02 Vue.js
Vue实现tab导航栏并支持左右滑动功能
Jun 28 Vue.js
详解Vue的列表渲染
Nov 20 Vue.js
Vue实现跑马灯样式文字横向滚动
Nov 23 Vue.js
分享一个vue实现的记事本功能案例
Apr 11 Vue.js
Vue 打包后相对路径的引用问题
Jun 05 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 Socket配置以及实例的详细介绍
2013/06/13 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
在JavaScript中监听IME键盘输入事件
2011/05/29 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
使用jquery清空、复位整个输入域
2015/04/02 Javascript
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
react中的ajax封装实例详解
2017/10/17 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
python利用拉链法实现字典方法示例
2017/03/25 Python
在python下读取并展示raw格式的图片实例
2019/01/24 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
python中的线程threading.Thread()使用详解
2019/12/17 Python
python如何求100以内的素数
2020/05/27 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
CSS3制作酷炫的条纹背景
2017/11/09 HTML / CSS
IWOOT美国:新奇的小玩意
2018/04/27 全球购物
linux面试题参考答案(4)
2014/09/21 面试题
农业大学毕业生的个人自我评价
2013/10/11 职场文书
医学专业职业生涯规划范文
2014/02/05 职场文书
五年级音乐教学反思
2014/02/06 职场文书
经贸专业毕业生求职信
2014/03/23 职场文书
校园广播稿100字
2014/10/06 职场文书
施工现场安全管理制度
2015/08/05 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js
Java9新特性对HTTP2协议支持与非阻塞HTTP API
2022/03/16 Java/Android
HTML中实现音乐或视频自动播放案例详解
2022/05/30 HTML / CSS