1 <template >
2 <el-table
3 row-key="name"
4 :data="tableData"
5 stripe style="width:100%;">
6 <el-table-column prop="name" label="测试"></el-table-column>
7 </el-table>
8 </template>
9
10 <script>
11 import Sortable from 'sortablejs'
12
13 export default {
14 data() {
15 return {
16 tableData: [
17 {
18 name: '凯小默111'
19 },
20 {
21 name: '凯小默222'
22 },
23 {
24 name: '凯小默333'
25 },
26 {
27 name: '凯小默444'
28 },
29 {
30 name: '凯小默555'
31 }
32 ]
33 }
34 },
35 mounted() {
36 //使每次都可以拖拽
37 this.$nextTick(()=>{
38 setTimeout(()=>{
39 this.rowDrop();
40 },100)
41 })
42 },
43 methods: {
44 //行拖拽
45 rowDrop() {
46 const tbody = document.querySelector('.el-table__body-wrapper tbody')
47 Sortable.create(tbody, {
48 onEnd:({ newIndex, oldIndex })=> {
49 const currRow = this.tableData.splice(oldIndex, 1)[0];
50 this.tableData.splice(newIndex, 0, currRow);
51 console.log(this.tableData);
52 }
53 })
54 },
55 }
56 }
57 </script>

如果碰到了火狐浏览器拖动会在新窗口打开并去百度进行搜索等问题,如下解决方式:

  mounted() {
document.body.ondrop = function (event) {
event.preventDefault()
event.stopPropagation()
}
<template >
    <el-table
        row-key="name"
        :data="tableData"
        stripe style="width:100%;">
        <el-table-column prop="name" label="测试"></el-table-column>
    </el-table>
</template>
<script>
import Sortable from 'sortablejs'
export default {
    data() {
        return {
            tableData: [
                {
                    name: '凯小默111'
                },
                {
                    name: '凯小默222'
                },
                {
                    name: '凯小默333'
                },
                {
                    name: '凯小默444'
                },
                {
                    name: '凯小默555'
                }
            ]
        }
    },
    mounted() {
        //使每次都可以拖拽
        this.$nextTick(()=>{
            setTimeout(()=>{
                this.rowDrop();
            },100)
        })
    },
    methods: {
        //行拖拽
        rowDrop() {
            const tbody = document.querySelector('.el-table__body-wrapper tbody')
            Sortable.create(tbody, {
                onEnd:({ newIndex, oldIndex })=> {
                    const currRow = this.tableData.splice(oldIndex, 1)[0];
                    this.tableData.splice(newIndex, 0, currRow);
                    console.log(this.tableData);
                }
            })
        },
    }
}
</script>

vue表格拖拽使用Sortable插件库的更多相关文章

  1. Vue 可拖拽组件 Vue Smooth DnD 详解和应用演示

    本文发布自 https://www.cnblogs.com/wenruo/p/15061907.html 转载请注明出处. 简介和 Demo 展示 最近需要有个拖拽列表的需求,发现一个简单好用的 Vu ...

  2. react拖拽(表格拖拽排序、普通拖拽排序以及树形拖拽排序)

    表格拖拽排序:组件地址:https://reactabular.js.org/#/drag-and-drop 拖动的排序是用React-DnD:React-DnD:http://react-dnd.g ...

  3. js 实现table表格拖拽和点击表头升降序排序

    js 实现table表格拖拽和点击表头升降序排序,写的比较乱,用的时候可以把其中的一些模块函数提取出来 样式,由于是可拖拽表格,所以样式 table tr th{cursor:move;} js实现 ...

  4. div拖拽缩放jquery插件编写——带8个控制点

    项目中需要对div进行拖拽缩放,需要有控制面板8个控制点的那种,原以为这么常见的效果应该能搜索到很多相关插件,然而可以完成拖拽的实繁,却找不到我想要的,还是自己动手丰衣足食吧 效果预览(只支持pc端) ...

  5. 实现Bootstrap表格拖拽

    实现Bootstrap表格拖拽: 需要引入jquery.min.js.bootstrap相关文件,以及jquery.dragsort-0.5.2.js 代码如下: <html> <h ...

  6. 基于Vue实现拖拽效果

    参考地址:基于Vue实现拖拽效果 参考链接中讲的比较详细,我只使用了其中自定义指令的方法.整体代码如下: <template> <!-- 卡片 --> <div clas ...

  7. vue内容拖拽放大缩小

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 自制一个H5图片拖拽、裁剪插件(原生JS)

    前言 如今的H5运营活动中,有很多都是让用户拍照或者上传图片,然后对照片加滤镜.加贴纸.评颜值之类的.尤其是一些拍照软件公司的运营活动几乎全部都是这样的. 博主也做过不少,为了省事就封装了一个简单的图 ...

  9. Vue实现拖拽穿梭框功能四种方式

    一.使用原生js实现拖拽 点击打开视频讲解更加详细 <html lang="en"> <head> <meta charset="UTF-8 ...

  10. jQuery的DOM操作实例(2)——拖拽效果&&拓展插件

    一.原生JavaScript编写拖拽效果 二.jQuery编写的拖拽效果 三.在jQuery中拓展一个拖拽插件

随机推荐

  1. System.Diagnostics.Process.Start(); 用法详解

    来源:https://news.68idc.cn/buildlang/ask/20150104156981.html 实例代码:http://www.cppcns.com/ruanjian/cshar ...

  2. Install Argo Workflows

    Install Argo Workflows Release v3.4.3 · argoproj/argo-workflows (github.com) CLI # Download the bina ...

  3. 查看树莓派CPU当前工作频率

    参考: https://raspberrypi.stackexchange.com/questions/1219/how-do-i-determine-the-current-mhz /proc/cp ...

  4. 初识Node

    Node的定义:一个搭建在Chrome JavaScript运行时上的平台,用于构建高速.可伸缩的网络程序.   Node构建与JS之上,在服务器端,Node使用V8虚拟机,执行的是本地机器码,省去了 ...

  5. PyQt5弹框定时关闭(python)

    PyQt5使用QMessageBox,可以设置在几秒后关闭  (作者使用的python3) info_box = QMessageBox()# 因为没使用这种方式 QMessageBox.inform ...

  6. ToLua中判断引用的C#对象是否为nil

    C#层对象已经删除了,但是lua层判断不为nil.然后lua调用了,又会报nil的错误. 这里提供了一种判断方式. lua里的判断.这个Util.IsNull()是C#层代码. function He ...

  7. vue 绑定样式,跟点击事件的顺序会影响

    <view class="mfst-item" v-for="(item, idx) in majorArr" :key="mfsKey&quo ...

  8. managing projects with GNU make pdf

    读 c++编程思想的时候作者推荐的关于makefile的书,大家随意抱走. 链接:https://pan.baidu.com/s/1k0qg9iA3V25C2yJnOi9WfQ 提取码:5vx1

  9. Java基于springboot大学生宿舍寝室考勤人脸识别管理系统

    简介 Java基于springboot开发的大学生寝室管理系统宿舍管理系统.学生可以查找寝室和室友信息,可以申请换寝室,申请维修,寝室长提交考勤信息(宿管确认学生考勤信息),补签,查看寝室通报,宿管信 ...

  10. Linux基本概念

    目录 1. 内核.内核态和用户态 2. 用户和组 3. 文件和文件系统 4. I/O模型 5. 程序.进程.线程和协程 6. shell.终端和会话 1. 内核.内核态和用户态 ​ 内核是指管理和分配 ...