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.0实现点击切换验证码(组件)及校验
Nov 18 Vue.js
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
vue+element实现动态加载表单
Dec 13 Vue.js
Vue实现手机号、验证码登录(60s禁用倒计时)
Dec 19 Vue.js
vue 页面跳转的实现方式
Jan 12 Vue.js
vue element和nuxt的使用技巧分享
Jan 14 Vue.js
如何在vue 中使用柱状图 并自修改配置
Jan 21 Vue.js
学习 Vue.js 遇到的那些坑
Feb 02 Vue.js
Vue鼠标滚轮滚动切换路由效果的实现方法
Aug 04 Vue.js
详解Vue项目的打包方式(生成dist文件)
Jan 18 Vue.js
vue使用wavesurfer.js解决音频可视化播放问题
Apr 04 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
php操纵mysqli数据库的实现方法
2016/09/18 PHP
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
jQuery cdn使用介绍
2013/05/08 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
[10:21]2018DOTA2国际邀请赛寻真——Winstrike
2018/08/11 DOTA
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
Python常见格式化字符串方法小结【百分号与format方法】
2016/09/18 Python
pandas 选择某几列的方法
2018/07/03 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
Python中url标签使用知识点总结
2020/01/16 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
pygame实现弹球游戏
2020/04/14 Python
简单了解Java Netty Reactor三种线程模型
2020/04/26 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
个人作风建设剖析材料
2014/10/11 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
信用卡催款律师函
2015/05/27 职场文书
2019最新激励员工口号大全!
2019/06/28 职场文书
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android