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实现表格合并功能
Dec 01 Vue.js
详解vue-cli项目在IE浏览器打开报错解决方法
Dec 10 Vue.js
Vue组件简易模拟实现购物车
Dec 21 Vue.js
vue 动态生成拓扑图的示例
Jan 03 Vue.js
vue调用微信JSDK 扫一扫,相册等需要注意的事项
Jan 03 Vue.js
vue+elementui通用弹窗的实现(新增+编辑)
Jan 07 Vue.js
vue 计算属性和侦听器的使用小结
Jan 25 Vue.js
vue实现简单数据双向绑定
Apr 28 Vue.js
Vue详细的入门笔记
May 10 Vue.js
一定要知道的 25 个 Vue 技巧
Nov 02 Vue.js
vue3引入highlight.js进行代码高亮的方法实例
Apr 08 Vue.js
如何优化vue打包文件过大
Apr 13 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 set_time_limit(0) 设置程序执行时间的函数
2010/05/26 PHP
php中get_headers函数的作用及用法的详细介绍
2013/04/27 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
PHP实现抓取HTTPS内容
2014/12/01 PHP
php 使用curl模拟登录人人(校内)网的简单实例
2016/06/06 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
jQuery 方法大全方便学习参考
2010/02/25 Javascript
JQuery 常用操作代码
2010/03/14 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
element-ui 弹窗组件封装的步骤
2021/01/22 Javascript
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
在Linux系统上部署Apache+Python+Django+MySQL环境
2015/12/24 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
浅析Windows 嵌入python解释器的过程
2019/07/26 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
python实现按关键字筛选日志文件
2019/12/24 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
纯CSS实现的大小渐变、渐远效果
2014/04/15 HTML / CSS
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
感恩祖国演讲稿
2014/09/09 职场文书
股份合作协议书
2014/09/10 职场文书
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
css3中transform属性实现的4种功能
2021/08/07 HTML / CSS
详解CSS3浏览器兼容
2022/12/24 HTML / CSS