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 26 Vue.js
vue动态合并单元格并添加小计合计功能示例
Nov 26 Vue.js
实用的 vue tags 创建缓存导航的过程实现
Dec 03 Vue.js
vue中如何添加百度统计代码
Dec 19 Vue.js
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
Vue图片裁剪组件实例代码
Jul 02 Vue.js
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
Apr 06 Vue.js
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 Vue.js
解决vue-router的beforeRouteUpdate不能触发
Apr 14 Vue.js
Vue操作Storage本地化存储
Apr 29 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
Yii框架表单模型和验证用法
2016/05/20 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
javascript 写类方式之五
2009/07/05 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
基于Node.js的JavaScript项目构建工具gulp的使用教程
2016/05/20 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
2016/11/01 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
微信小程序侧边栏滑动特效(左右滑动)
2017/01/23 Javascript
jquery实现静态搜索功能(可输入搜索文字)
2017/03/28 jQuery
SeaJS中use函数用法实例分析
2017/10/10 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
Vue导出页面为PDF格式的实现思路
2018/07/31 Javascript
Bootstrap Table列宽拖动的方法
2018/08/15 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
wx-charts 微信小程序图表插件的具体使用
2019/08/18 Javascript
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
python简单实现基数排序算法
2015/05/16 Python
python遍历目录的方法小结
2016/04/28 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
Django CBV类的用法详解
2019/07/26 Python
python学生信息管理系统实现代码
2019/12/17 Python
keras获得model中某一层的某一个Tensor的输出维度教程
2020/01/24 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
LN-CC日本:高端男装和女装的奢侈时尚目的地
2019/09/01 全球购物
安全标准化实施方案
2014/02/20 职场文书
生日宴会主持词
2014/03/20 职场文书
生日寄语大全
2014/04/08 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
兵马俑导游词
2015/02/02 职场文书
捐款仪式主持词
2015/07/04 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书
判断Python中的Nonetype类型
2021/05/25 Python