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中watch的用法汇总
Dec 28 Vue.js
vue+vant 上传图片需要注意的地方
Jan 03 Vue.js
Vue 数据响应式相关总结
Jan 28 Vue.js
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
vue3.0中使用element的完整步骤
Mar 04 Vue.js
前端vue+express实现文件的上传下载示例
Feb 18 Vue.js
vue.js 使用原生js实现轮播图
Apr 26 Vue.js
vue生命周期钩子函数以及触发时机
Apr 26 Vue.js
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 Vue.js
vue3不同环境下实现配置代理
May 25 Vue.js
vue css 相对路径导入问题级踩坑记录
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
几种显示数据的方法的比较
2006/10/09 PHP
PHP下几种删除目录的方法总结
2007/08/19 PHP
php多文件上传实现代码
2014/02/20 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
实例化php类时传参的方法分析
2020/06/05 PHP
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
基于node.js的快速开发透明代理
2010/12/25 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
利用javascript数组长度循环数组内所有元素
2013/12/27 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
2018/01/07 Javascript
详解如何用babel转换es6的class语法
2018/04/03 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
2020/09/16 Javascript
解决ant Design中Select设置initialValue时的大坑
2020/10/29 Javascript
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
TensorFlow实现打印每一层的输出
2020/01/21 Python
Python如何转换字符串大小写
2020/06/04 Python
省优秀教师事迹材料
2014/01/30 职场文书
运动会加油稿100字
2014/09/19 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python
Golang全局变量加锁的问题解决
2021/05/08 Golang
Python中的套接字编程是什么?
2021/06/21 Python