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 elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
Vue3配置axios跨域实现过程解析
Nov 25 Vue.js
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
vue添加自定义右键菜单的完整实例
Dec 08 Vue.js
vue实现验证用户名是否可用
Jan 20 Vue.js
vue如何使用rem适配
Feb 06 Vue.js
vue常用高阶函数及综合实例
Feb 25 Vue.js
vue项目实现分页效果
Mar 24 Vue.js
如何vue使用el-table遍历循环表头和表体数据
Apr 26 Vue.js
Vue操作Storage本地化存储
Apr 29 Vue.js
vue使用watch监听属性变化
Apr 30 Vue.js
vue中data里面的数据相互使用方式
Jun 05 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
PHP调用Webservice实例代码
2011/07/29 PHP
详解PHP的Yii框架中的Controller控制器
2016/03/29 PHP
PHP删除字符串中非字母数字字符方法总结
2019/01/20 PHP
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
javascript函数以及基础写法100多条实用整理
2013/01/13 Javascript
a标签的href和onclick 的事件的区别介绍
2013/07/26 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
微信小程序 PHP后端form表单提交实例详解
2017/01/12 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
H5图片压缩与上传实例
2017/04/21 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
Python八皇后问题解答过程详解
2019/07/29 Python
pytorch 固定部分参数训练的方法
2019/08/17 Python
哪些是python中web开发框架
2020/06/17 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
Python self用法详解
2020/11/28 Python
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
介绍一下Ruby的特点
2013/01/20 面试题
网络专业学生个人的自我评价
2013/12/16 职场文书
记者岗位职责
2014/01/06 职场文书
小学生秋游活动方案
2014/02/23 职场文书
cf搞笑广告词
2014/03/14 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书
卖车协议书范文
2016/03/23 职场文书
详解非极大值抑制算法之Python实现
2021/06/28 Python
Python学习开发之图形用户界面详解
2021/08/23 Python