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如何循环提取对象数组中的值
Nov 18 Vue.js
vue单元格多列合并的实现
Nov 26 Vue.js
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 Vue.js
vue表单验证之禁止input输入框输入空格
Dec 03 Vue.js
vue祖孙组件之间的数据传递案例
Dec 07 Vue.js
vue3+typeScript穿梭框的实现示例
Dec 29 Vue.js
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
用vite搭建vue3应用的实现方法
Feb 22 Vue.js
详解Vue.js 可拖放文本框组件的使用
Mar 03 Vue.js
如何理解Vue简单状态管理之store模式
May 15 Vue.js
vue-cropper插件实现图片截取上传组件封装
May 27 Vue.js
VUE递归树形实现多级列表
Jul 15 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
DC游戏Steam周三特惠 《蝙蝠侠》阿卡姆系列平史低
2020/04/09 欧美动漫
让PHP支持页面回退的两种方法
2008/01/10 PHP
php socket方式提交的post详解
2008/07/19 PHP
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
初探jquery——表单应用范例
2007/02/20 Javascript
用js生产批量批处理执行命令
2008/07/28 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
JavaScript浏览器对象之一Window对象详解
2016/06/03 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
2018/01/04 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
python实现探测socket和web服务示例
2014/03/28 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
python爬虫实战之爬取京东商城实例教程
2017/04/24 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
python生成lmdb格式的文件实例
2018/11/08 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
英国设计师泳装、沙滩装和比基尼在线精品店:Beach Cafe
2019/08/28 全球购物
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
体育课外活动总结
2014/07/08 职场文书
雨雪天气温馨提示
2015/07/15 职场文书
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS