vue.js + element UI实现表格、列表的拖动 推拽效果
2018-11-14 15:52
4559 查看
表格、列表的拖动、拖拽效果
在开发使用vue.js、elementUI开发项目时,客户提出将表格中的内容可随意拖动实现排序功能。
于是项目中采用sortablejs来实现该功能。
1.引入sortablejs
$ npm install sortablejs --save
2.组件中引入sortablejs
<script> import Sortable from "sortablejs"
3.实现方法
methods: { init() { // 一定要等页面先加载完后才调用,否则会报错 this.$nextTick(() => { this.initSort() }) }, initSort() { const el = document.querySelectorAll( ".table-list .el-table__body-wrapper > table > tbody" )[0] // 获取拖拽的容器 .table-list 一定是table上的class 如果是其他上的class名称,可能会无法拖拽 this.sortable = Sortable.create(el, { ghostClass: "sortable-ghost", // handle: ".drag-item", // 指定推拽列 setData: function (dataTransfer) { dataTransfer.setData("Text", "") }, onEnd: evt => { this.$nextTick(() => { // 实现推拽的代码,先在原数组中删除当前推拽的对象,然后在将它添加到对应的位置 // targetObj当前推拽的对象,evt.oldIndex推拽对象原来的下标,evt.newIndex推拽对象要推拽到的下标 let targetObj = this.tables.splice(evt.oldIndex, 1)[0] this.tables.splice(evt.newIndex, 0, targetObj) }) } }) }
4.
注意、注意、注意:如果你推拽不成功,或者顺序不正确,请查看<el-table>标签上是否指定了row-key属性。
<el-table :data=tables class="table-list" row-key="id" ref="table" size='small' border>
5.如果你要使用
handle: ".drag-item",属性的话,需要再表格中添加如下代码,指定其
className="drag-item"
<el-table :data=tables class="table-list" row-key="id" ref="table" size='small' border><el-table-column className="drag-item" width="50" align="center" label="拖拽"> <template slot-scope="scope"> <i class="icon icon-drag"></i> </template> </el-table-column>
最后附上 sortablejs 文档地址
如果本文对你有帮助,请大佬打赏,谢谢
相关文章推荐
- vuedraggable+element ui实现页面控件拖拽排序效果
- Element UI 中可展开表格手风琴效果实现(toggleRowExpansion方法的正确使用方式)
- .Net Core+Vue.js+ElementUI 实现前后端分离
- vue.js+Element实现表格里的增删改查
- Vue2.0+ElementUI+PageHelper实现的表格分页
- 在Vue中使用sortable.js实现拖动效果并保存拖动数据
- vuedraggable+element ui实现页面控件拖拽排序效果
- Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(二)
- vue+element-ui+ajax实现一个表格的实例
- java + jquery-ui.sortable.js插件实现表格拖动排序
- vue.js与element-ui实现菜单树形结构的解决方法
- 浅谈使用element ui + vuedraggable + sortablejs实现多种版式布局及托拽(1)
- vue+Element-ui实现分页效果
- vue2.0 使用element-ui里的upload组件实现图片预览效果方法
- 可拖动拉伸的左右分栏效果,本例子是用Table以及JS来实现的,左右分栏可改变,拖动中间的边框就可实现宽度的调整,点击时可设置为隐藏左侧列表。
- 可拖动拉伸的左右分栏效果,本例子是用Table以及JS来实现的,左右分栏可改变,拖动中间的边框就可实现宽度的调整,点击时可设置为隐藏左侧列表。
- vue.js+element-ui,页面中使用row-class-name属性达到表格中状态、颜色的区分
- 浅谈使用element ui + vuedraggable + sortablejs实现多种版式布局及托拽(2)
- vue+ElementUI实现订单页动态添加产品数据效果实例代码
- Vue.js实现表格数据增、删、改、查效果