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 表单输入框不支持focus及blur事件的解决方案
Nov 17 Vue.js
vue祖孙组件之间的数据传递案例
Dec 07 Vue.js
vue使用exif获取图片经纬度的示例代码
Dec 11 Vue.js
8个非常实用的Vue自定义指令
Dec 15 Vue.js
vue 实现基础组件的自动化全局注册
Dec 25 Vue.js
vue集成一个支持图片缩放拖拽的富文本编辑器
Jan 29 Vue.js
vue-router懒加载的3种方式汇总
Feb 28 Vue.js
vue实现简单数据双向绑定
Apr 28 Vue.js
浅谈Vue的computed计算属性
Mar 21 Vue.js
Vue+Flask实现图片传输功能
Apr 01 Vue.js
vue实现列表垂直无缝滚动
Apr 08 Vue.js
vue实现登陆页面开发实践
May 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
PHP操作数组的一些函数整理介绍
2011/07/17 PHP
hadoop中一些常用的命令介绍
2013/06/19 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
php使用curl下载指定大小的文件实例代码
2017/09/30 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
2019/09/29 PHP
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
juqery 学习之三 选择器 可见性 元素属性
2010/11/25 Javascript
javascript几个易错点记录
2014/11/26 Javascript
node.js中的fs.rmdirSync方法使用说明
2014/12/16 Javascript
javascript实现详细时间提醒信息效果的方法
2015/03/11 Javascript
javascript中一些util方法汇总
2015/06/10 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
nodejs集成sqlite使用示例
2017/06/05 NodeJs
Python 调用DLL操作抄表机
2009/01/12 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
Python try except else使用详解
2021/01/12 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
Java提供了哪些企业应用编程接口
2015/02/13 面试题
学习十八大报告感言
2014/02/28 职场文书
教学评估实施方案
2014/03/16 职场文书
校庆标语集锦
2014/06/25 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
慰问信格式
2015/02/14 职场文书
自主招生英文自荐信
2015/03/25 职场文书
mysql优化
2021/04/06 MySQL
浅谈移动端中的视口(viewport)的具体使用
2021/04/13 HTML / CSS