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 element实现表格合并行数据
Nov 30 Vue.js
vue $router和$route的区别详解
Dec 02 Vue.js
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
vue中如何添加百度统计代码
Dec 19 Vue.js
为什么推荐使用JSX开发Vue3
Dec 28 Vue.js
解决vue使用vant轮播组件swipe + flex时文字抖动问题
Jan 07 Vue.js
vue实现简易计算器功能
Jan 20 Vue.js
vue路由实现登录拦截
Mar 24 Vue.js
关于vue中如何监听数组变化
Apr 28 Vue.js
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 Vue.js
Vue.js中v-for指令的用法介绍
Mar 13 Vue.js
vue实现input输入模糊查询的三种方式
Aug 14 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生成Flash动画的实现代码
2010/03/12 PHP
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
PHP XML error parsing SOAP payload on line 1
2010/06/17 PHP
php输出xml属性的方法
2015/03/19 PHP
PHP中的流(streams)浅析
2015/07/02 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
通过location.replace禁止浏览器后退防止重复提交
2014/09/04 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
使用flow来规范javascript的变量类型
2019/09/12 Javascript
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
python使用PyQt5的简单方法
2019/02/27 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
python for和else语句趣谈
2019/07/02 Python
Python flask框架post接口调用示例
2019/07/03 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
巴西服装和鞋子购物网站:Marisa
2018/10/25 全球购物
瑞典度假品牌:OAS
2019/05/28 全球购物
环保建议书作文
2014/03/12 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
毕业生找工作自荐书
2014/06/30 职场文书
工商局领导班子存在的问题整改措施思想汇报
2014/10/05 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
保护地球的宣传语
2015/07/13 职场文书
《中国古代诗歌散文欣赏》高中语文教材
2019/08/20 职场文书
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL
vue中 this.$set的使用详解
2021/11/17 Vue.js