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实现下载文件流完整前后端代码
Nov 17 Vue.js
Vue3+elementui plus创建项目的方法
Dec 01 Vue.js
Vue router安装及使用方法解析
Dec 02 Vue.js
详解Vue的异步更新实现原理
Dec 22 Vue.js
vue实现简易的双向数据绑定
Dec 29 Vue.js
vscode自定义vue模板的实现
Jan 27 Vue.js
vue实现拖拽进度条
Mar 01 Vue.js
Vue Element UI自定义描述列表组件
May 18 Vue.js
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
May 25 Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
vue 给数组添加新对象并赋值
Apr 20 Vue.js
vue.js 使用原生js实现轮播图
Apr 26 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
一个基于PDO的数据库操作类
2011/03/24 PHP
去除php注释和去除空格函数分享
2014/03/13 PHP
自己写了一个php检测文件编码的函数
2014/04/21 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
jquery统计复选框选中示例
2013/11/05 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
python matplotlib中文显示参数设置解析
2017/12/15 Python
利用python画出AUC曲线的实例
2020/02/28 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
Internal修饰符有什么含义
2013/07/10 面试题
同学聚会欢迎辞
2014/01/14 职场文书
技能比赛获奖感言
2014/02/14 职场文书
请假条怎么写
2014/04/10 职场文书
初中生操行评语大全
2014/04/24 职场文书
学生会主席演讲稿
2014/04/25 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
关于上班时间调整的通知
2015/04/23 职场文书
高质量“欢迎词”
2019/04/03 职场文书
如何书写先进事迹材料?
2019/07/02 职场文书
python 调用js的四种方式
2021/04/11 Python
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis