vue实现列表拖拽排序的示例代码


Posted in Vue.js onApril 08, 2022

 本文主要介绍了vue实现列表拖拽排序的示例代码,具体如下:

vue实现列表拖拽排序的示例代码

<template>
  <div class="test_wrapper" @dragover="dragover($event)">
    <transition-group class="transition-wrapper" name="sort">
      <div v-for="(item) in dataList" :key='item.id' class="sort-item"
        :draggable="true"
        @dragstart="dragstart(item)"
        @dragenter="dragenter(item,$event)"
        @dragend="dragend(item,$event)"
        @dragover="dragover($event)"
      >
        {{ item.label }}
      </div>
    </transition-group>
  </div>
</template>
 
<script lang="ts">
  import {Vue, Component, Prop, Watch} from "vue-property-decorator";
  import { addWebsite } from '@/api'
  @Component({
    components: {}
  })
  export default class Test extends Vue {
 
    oldData: any = null; // 开始排序时按住的旧数据
    newData: any = null; // 拖拽过程的数据
 
    // 列表数据
    dataList:any = [
      { id:1,label:'测试一号' },
      { id:2,label:'测试二号' },
      { id:3,label:'测试三号' },
      { id:4,label:'测试四号' },
    ];
 
    dragstart(value: any) {
      this.oldData = value
    }
 
    // 记录移动过程中信息
    dragenter(value: any, e: any) {
      this.newData = value
      e.preventDefault()
    }
 
    // 拖拽最终操作
    dragend(value: any, e: any) {
      if (this.oldData !== this.newData) {
        let oldIndex = this.dataList.indexOf(this.oldData)
        let newIndex = this.dataList.indexOf(this.newData)
        let newItems = [...this.dataList]
        // 删除老的节点
        newItems.splice(oldIndex, 1)
        // 在列表中目标位置增加新的节点
        newItems.splice(newIndex, 0, this.oldData)
        this.dataList = [...newItems]
      }
    }
 
 
    // 拖动事件(主要是为了拖动时鼠标光标不变为禁止)
    dragover(e: any) {
      e.preventDefault()
    }
 
 
  };
</script>
<style>
.sort-move {
  transition: transform 0.3s;
}
</style>

到此这篇关于vue实现列表拖拽排序的示例代码的文章就介绍到这了,更多相关vue 列表拖拽排序内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
vue+vant实现购物车全选和反选功能
Nov 17 Vue.js
Vue实现购物小球抛物线的方法实例
Nov 22 Vue.js
Vue如何跨组件传递Slot的实现
Dec 14 Vue.js
Vue解决移动端弹窗滚动穿透问题
Dec 15 Vue.js
浅析vue中的nextTick
Dec 28 Vue.js
vue element和nuxt的使用技巧分享
Jan 14 Vue.js
vue实现简易计算器功能
Jan 20 Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 Vue.js
vue打开新窗口并实现传参的图文实例
Mar 04 Vue.js
Vue3如何理解ref toRef和toRefs的区别
Feb 18 Vue.js
vue修饰符.capture和.self的区别
Apr 22 Vue.js
解决vue自定义组件@click点击失效问题
Apr 30 Vue.js
vue实现可以快进后退的跑马灯组件
Apr 08 #Vue.js
Axios代理配置及封装响应拦截处理方式
vue-cil之axios的二次封装与proxy反向代理使用说明
Apr 07 #Vue.js
vue实现拖拽交换位置
Apr 07 #Vue.js
Vue.Draggable实现交换位置
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
vue cli4中mockjs在dev环境和build环境的配置详情
You might like
根德Grundig S400/S500/S700电路分析
2021/03/02 无线电
php修改NetBeans默认字体的大小
2013/07/02 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
2016/11/15 PHP
PHP实现的常规正则验证helper公共类完整实例
2017/04/27 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
2019/05/14 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
javascript 自定义事件初探
2009/08/21 Javascript
基于jquery的二级联动菜单实现代码
2011/04/25 Javascript
在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别
2013/04/15 Javascript
JavaScript中for..in循环陷阱介绍
2013/11/12 Javascript
JavaScript中的console.dir()函数介绍
2014/12/29 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
2015/03/04 Javascript
浅谈JS继承_借用构造函数 &amp; 组合式继承
2016/08/16 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
2017/08/18 jQuery
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
python 文件和路径操作函数小结
2009/11/23 Python
Python实现批量下载图片的方法
2015/07/08 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
德国户外商店:eXXpozed
2020/07/25 全球购物
请说出你所知道的线程同步的方法
2013/04/19 面试题
工程造价专业大学生自荐信
2013/10/01 职场文书
市场营销管理制度
2014/01/29 职场文书
《真想变成大大的荷叶》教学反思
2014/04/14 职场文书
2014年安置帮教工作总结
2014/12/11 职场文书
2015年高考寄语或鼓励的话
2015/03/23 职场文书
检讨书模板大全
2015/05/07 职场文书
员工手册董事长致辞
2015/07/29 职场文书
Elasticsearch 索引操作和增删改查
2022/04/19 Python