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中defineProperty和Proxy的区别详解
Nov 30 Vue.js
vue 导航守卫和axios拦截器有哪些区别
Dec 19 Vue.js
vue+echarts实现中国地图流动效果(步骤详解)
Jan 27 Vue.js
如何使用RoughViz可视化Vue.js中的草绘图表
Jan 30 Vue.js
vue脚手架项目创建步骤详解
Mar 02 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
vue3如何优雅的实现移动端登录注册模块
Mar 29 Vue.js
Vue实现下拉加载更多
May 09 Vue.js
vue-router中hash模式与history模式的区别
Jun 23 Vue.js
解决vue-router的beforeRouteUpdate不能触发
Apr 14 Vue.js
vue实现登陆页面开发实践
May 30 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
PHP中常用的输出函数总结
2014/09/22 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
PHP 实现缩略图
2021/03/09 PHP
动态控制Table的js代码
2007/03/07 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
js中的布尔运算符使用介绍
2013/11/20 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
JSONP之我见
2015/03/24 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
JavaScript九九乘法口诀表的简单实现
2016/10/04 Javascript
Three.js基础部分学习
2017/01/08 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
解决elementui表格操作列自适应列宽
2020/12/28 Javascript
Python下的Mysql模块MySQLdb安装详解
2014/04/09 Python
Python标准库内置函数complex介绍
2014/11/25 Python
Python中的面向对象编程详解(上)
2015/04/13 Python
基于scrapy实现的简单蜘蛛采集程序
2015/04/17 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
Python使用get_text()方法从大段html中提取文本的实例
2019/08/27 Python
pytorch 实现在预训练模型的 input上增减通道
2020/01/06 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
庆元旦文艺演出主持词
2014/03/27 职场文书
司机岗位职责说明书
2014/07/29 职场文书
加强作风建设心得体会
2014/10/22 职场文书
公司2014年度工作总结
2014/12/10 职场文书
2014年信息中心工作总结
2014/12/17 职场文书
行政撤诉申请书
2015/05/18 职场文书
redis限流的实际应用
2021/04/24 Redis
PC版《死亡搁浅导剪版》现已发售 展开全新的探险
2022/04/03 其他游戏