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解决移动端弹窗滚动穿透问题
Dec 15 Vue.js
Vue与React的区别和优势对比
Dec 18 Vue.js
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
vue实现图书管理系统
Dec 29 Vue.js
vue自定义组件实现双向绑定
Jan 13 Vue.js
Vite和Vue CLI的优劣
Jan 30 Vue.js
vue+django实现下载文件的示例
Mar 24 Vue.js
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
Vue+Element UI实现概要小弹窗的全过程
May 30 Vue.js
浅谈Vue的computed计算属性
Mar 21 Vue.js
vue3使用vuedraggable实现拖拽功能
Apr 06 Vue.js
vue封装数字翻牌器
Apr 20 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/08 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
php处理restful请求的路由类分享
2014/02/27 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
YUI的Tab切换实现代码
2010/04/11 Javascript
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
js拦截alert对话框另类应用
2013/01/16 Javascript
js之事件冒泡和事件捕获详细介绍
2013/10/28 Javascript
javascript实现uploadify上传格式以及个数限制
2015/11/23 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
javascript self对象使用详解
2016/10/18 Javascript
ionic2打包android时gradle无法下载的解决方法
2017/04/05 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
详解微信小程序用定时器实现倒计时效果
2019/04/30 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
2014/08/25 Python
用Python写一个无界面的2048小游戏
2016/05/24 Python
启动targetcli时遇到错误解决办法
2017/10/26 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
Django  ORM 练习题及答案
2019/07/19 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
python matlab库简单用法讲解
2020/12/31 Python
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
大学生党员自我评价范文
2014/04/09 职场文书
三好生演讲稿
2014/09/12 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书
出租车拒载检讨书
2015/01/28 职场文书
宿舍卫生管理制度
2015/08/05 职场文书
如何书写读后感?(附范文)
2019/07/26 职场文书
JS Canvas接口和动画效果大全
2021/04/29 Javascript
我的收音机情缘
2022/04/05 无线电