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 的 v-model用法实例
Nov 23 Vue.js
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 Vue.js
vue3弹出层V3Popup实例详解
Jan 04 Vue.js
详解实现vue的数据响应式原理
Jan 20 Vue.js
Vue仿Bibibili首页的问题
Jan 21 Vue.js
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
手动实现vue2.0的双向数据绑定原理详解
Feb 06 Vue.js
Vue如何实现变量表达式选择器
Feb 18 Vue.js
Vue中避免滥用this去读取data中数据
Mar 02 Vue.js
vue Element-ui表格实现树形结构表格
Jun 07 Vue.js
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 Vue.js
VUE之图片Base64编码使用ElementUI组件上传
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
在任意字符集下正常显示网页的方法二(续)
2007/04/01 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
php获取表单中多个同名input元素的值
2014/03/20 PHP
动态样式类封装JS代码
2009/09/02 Javascript
jQuery 加上最后自己的验证
2009/11/04 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
JavaScript 数组的进化与性能分析
2017/09/18 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
[03:17]DOTA2英雄基础教程 剧毒术士
2013/12/12 DOTA
[01:17:12]职来职往完美电竞专场
2014/09/18 DOTA
使用C语言来扩展Python程序和Zope服务器的教程
2015/04/14 Python
python生成随机密码或随机字符串的方法
2015/07/03 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
windows下python连接oracle数据库
2017/06/07 Python
python 杀死自身进程的实现方法
2019/07/01 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
党的群众路线教育实践活动批评与自我批评
2014/02/16 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
2015年路政工作总结
2015/05/22 职场文书
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
2021/04/01 PHP
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫