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 Teleport 的实践及原理
Dec 02 Vue.js
vue中利用three.js实现全景图的完整示例
Dec 07 Vue.js
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 Vue.js
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
Dec 30 Vue.js
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
vue watch监控对象的简单方法示例
Jan 07 Vue.js
Vue实现多页签组件
Jan 14 Vue.js
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
Vue基本指令实例图文讲解
Feb 25 Vue.js
vue+flask实现视频合成功能(拖拽上传)
Mar 04 Vue.js
vue使用节流函数的踩坑实例指南
May 20 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 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+mysql实现简单的增删改查功能
2015/07/13 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
2017/03/23 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
2012/10/24 Javascript
Bootstrap每天必学之栅格系统(布局)
2015/11/25 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
[11:44]Ti9 OG夺冠时刻
2019/08/25 DOTA
Random 在 Python 中的使用方法
2018/08/09 Python
tensorflow使用指定gpu的方法
2020/02/04 Python
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
社会实践自我鉴定
2013/11/07 职场文书
日语专业毕业生自荐信
2013/11/11 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
会务接待方案
2014/02/27 职场文书
捐款倡议书
2014/04/14 职场文书
5.12护士节演讲稿
2014/04/30 职场文书
计算机网络专业求职信
2014/06/05 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript