sortable+element 实现表格行拖拽的方法示例


Posted in Javascript onJune 07, 2019

背景

1、vue项目中的表格需要实现行拖拽功能

2、表格使用element组件库中el-table

方案介绍

Sortable.js

介绍:Sortable.js是一款轻量级的拖放排序列表的js插件

引用自官方文档:No jQuery required. Supports Meteor, AngularJS, React, Polymer, Vue, Knockout and any CSS library, e.g. Bootstrap.

参考地址: https://github.com/SortableJS/Sortable

vuedraggable
介绍:基于Sortable.js的vue组件,用以实现拖拽功能

引用自官方文档:Vue drag-and-drop component based on Sortable.js

参考地址: https://github.com/SortableJS/Vue.Draggable

遇到的问题
在使用vuedraggable的过程中,发现必须用<draggable></draggable>包裹拖动项的父级元素,但是element组件库对table进行封装,无法直接包裹拖动项(即tr)的父级元素

如果你的项目中,表格未使用组件库,实现可以参考 https://3water.com/article/162648.htm

解决方案

使用 sortable.js

步骤一: 安装

npm install vuedraggable

步骤二:引入

import Sortable from 'sortablejs';

@Component({
 components: {
  Sortable
 }
})

步骤三: el-table 添加row-key属性

<el-table
 ref="filterTable"
 row-key="ip" 
 @filter-change="handlerFilterChange" 
 class="cl-table" 
 :data="resourceList" 
 v-loading="resourceListLoading" 
 stripe style="width:100%;">
 <el-table-column
   prop="name"
  label="主机名" 
  :min-width="150" 
  show-overflow-tooltip>
 </el-table-column>
 </el-table>

步骤四 : 将拖拽元素设置为要拖动项的父级元素

mounted() {
   // 表格中需要实现行拖动,所以选中tr的父级元素
  const table = document.querySelector('.el-table__body-wrapper tbody')
  const self = this
  Sortable.create(table, {
   onEnd({ newIndex, oldIndex }) {
    console.log(newIndex, oldIndex)
    const targetRow = self.resourceList.splice(oldIndex, 1)[0]
    self.resourceList.splice(newIndex, 0, targetRow)
   }
  })
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 传统事件模型构造的事件监听器实现代码
May 31 Javascript
JS拖动技术 关于setCapture使用
Dec 09 Javascript
JavaScript中的Math 使用介绍
Apr 21 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
May 28 Javascript
Node.js实现在目录中查找某个字符串及所在文件
Sep 03 Javascript
JavaScript设计模式之工厂模式和构造器模式
Feb 11 Javascript
全系IE支持Bootstrap的解决方法
Oct 19 Javascript
JS前端加密算法示例
Dec 22 Javascript
layer.open 按钮的点击事件关闭方法
Aug 17 Javascript
vue服务端渲染缓存应用详解
Sep 12 Javascript
使用layui的router来进行传参的实现方法
Sep 06 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
Feb 11 Vue.js
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
Jun 07 #Javascript
Vue中实现权限控制的方法示例
Jun 07 #Javascript
vue 父组件中调用子组件函数的方法
Jun 06 #Javascript
通过seajs实现JavaScript的模块开发及按模块加载
Jun 06 #Javascript
小试小程序云开发(小结)
Jun 06 #Javascript
怎么使用javascript深度拷贝一个数组
Jun 06 #Javascript
微信小程序如何使用globalData的方法
Jun 06 #Javascript
You might like
用PHP制作的意见反馈表源码
2007/03/11 PHP
PHP中文件上传的一个问题
2010/09/04 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
childNodes.length与children.length的区别
2009/05/14 Javascript
多浏览器兼容的获取元素和鼠标的位置的js代码
2009/12/15 Javascript
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
用示例说明filter()与find()的用法以及children()与find()的区别分析
2013/04/26 Javascript
用jquery实现的一个超级简单的下拉菜单
2014/05/18 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
jQuery可见性过滤选择器用法示例
2016/09/09 Javascript
详解jQuery事件
2017/01/13 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
element-ui 设置菜单栏展开的方法
2018/08/22 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
快速对接payjq的个人微信支付接口过程解析
2019/08/15 Javascript
使用React-Router实现前端路由鉴权的示例代码
2020/07/26 Javascript
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
python不换行之end=与逗号的意思及用途
2017/11/21 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
2020/03/09 Python
英国标志性奢侈品牌:Burberry
2016/07/28 全球购物
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
英国百年闻名的优质健康产品连锁店:Holland & Barrett
2019/12/19 全球购物
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
公司活动邀请函
2014/01/24 职场文书
常务副总经理任命书
2014/06/05 职场文书
临床专业自荐信
2014/06/22 职场文书
走进科学观后感
2015/06/18 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang