element table 可拖拽,elementui table 拖拽

  element table 可拖拽,elementui table 拖拽

  主要介绍拖拽插件sortable.js实现el-table表格的拖拽效果。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。

  

目录

  问题描述案例1简单拖拽代码附案例2 el-table表单拖拽效果图代码附。

  

问题描述

  Sortable.js是一个优秀的js拖放库。因为是原生js写的,所以性能不错,也支持移动终端。这里有两个案例可以学习。

  

案例一 简单拖拽

  翻译

  

代码附上

  看关于理解的笔记。如果运行它,请复制并粘贴它。

  !声明文档类型

  超文本标记语言

  头

  meta charset=utf-8 /

  Titlesortable.js拖动示例/title

  meta name=viewport

  content= width=设备宽度,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no,minimal-ui

  !-介绍插件-

  script src= https://www . itxst . com/package/sortable/sortable . min . js /script

  风格

  #wrapBox {

  宽度:360px

  /*拖动容器的高度,该高度根据拖动项的高度扩展*/

  高度:自动;

  }

  #wrapBox div {

  填充:8px

  背景色:# fdfdfd

  边框:纯色1px # eee

  边距-底部:10px

  /*将鼠标悬停样式添加到移动样式中,否则不好看*/

  光标:移动;

  字体大小:13px

  }

  /*设置鼠标按下时的样式,加点好看的*/

  #wrapBox div:活动{

  背景色:# eee

  }

  /风格

  /头

  身体

  H2优先扣减顺序:/h2

  !-一般来说,拖动的结构是:外面一个拖动容器,里面一个接一个拖动项目-

  div id=wrapBox

  Div-ID= 1 ICBC ICBC /div

  Div-ID= 2中国建设银行中国建设银行/div

  Div-ID= 3中行中行/div

  Div-ID= 4农行农行/div

  Div-ID= 5交通银行交通银行/div

  /div

  脚本

  //第一步,获取拖动容器

  var wrap=document . getelementbyid( wrap box );

  //第二步,设置拖动项的拖动规则。

  var规则={

  Animation: 500,//拖动时元素位置变化的动画时长,

  //拖动完成后的回调函数

  onEnd:函数(事件){

  Console.log(参数是拖动事件对象,事件);

  //拖动后得到容器中每一项的位置顺序。

  var arr=sortable . to array();

  Console.log(位置排序,arr);

  },

  };

  //第三步,初始化——向拖动容器添加拖动规则。

  var sortable=sortable . create(wrap,rules);

  /**

  *插件自己的方法:

  * 1.sortable.toArray()获取每个序列化项目元素的id属性的数组。

  * 2.将拖动规则添加到拖动容器中。

  * */

  /脚本

  /body

  /html

  

案例二 el-table表格拖拽

  这里有一个细节,就是在拖拽头部数据的时候,可能会导致渲染数据不正确的问题。有的博主搞两个头数组数据,其实是解决问题的办法。不过,愚见有点麻烦。事实上,可以使用一个头数组数据。及时清除,重新分配就行了。

  

效果图

  

代码附上

  这里用的是vue,所以需要下载cnpm安装sortablejs - save。

  直接复制粘贴代码运行,看效果图。请看使用说明评论。

  模板

  div class=myWrap

  el表

  :data=tableBody

  边界

  row-key=id

  :header-cell-style={

  高度:“48px”,

  背景: #FAFAFA ,

  颜色: #333333 ,

  fontWeight:粗体,

  fontSize: 14px ,

  }

  !-检查方框列-

  El-table-column type= selection width= 48 固定/el-table-column

  !-序列号栏-

  El-table-column标签=序列号类型=索引宽度=50 固定

  /El-表格-列

  !-标题列-

  El-表格-列

  表头中的v-for=(item,index

  :key=item.index

  :prop=item.prop

  :label=item.label

  /El-表格-列

  /el-table

  br /

  H3标题数据/h3

  pre{{ tableHeader }}/pre

  br /

  H3表体数据/h3

  pre{{ tableBody }}/pre

  /div

  /模板

  脚本

  //引入sortablejs插件,拖拽主要靠这个插件。

  从“sortablejs”导入可排序的;

  导出默认值{

  data() {

  返回{

  //标题数据

  表格标题:[

  {

  标签:“名称”,

  道具:“名称”,

  },

  {

  标签:“年龄”,

  道具:“年龄”,

  },

  {

  标签:“家乡”,

  道具:“家”,

  },

  {

  标签:“爱好”,

  道具:“爱好”,

  },

  ],

  //表体数据

  表体:[

  {

  id:“1”,

  名字:“美猴王”,

  年龄:500,

  家:‘花果山’,

  爱好:“吃桃子”,

  },

  {

  id:“2”,

  姓名:猪八戒,

  年龄:88,

  家:‘高老庄’,

  爱好:“吃包子”,

  },

  {

  id:“3”,

  姓名:“沙和尚”,

  年龄:1000,

  家:‘通天河’,

  爱好:“游泳”,

  },

  {

  id:“4”,

  姓名:唐僧,

  年龄:99999,

  家:‘东土大唐’,

  爱好:“诵经”,

  },

  ],

  };

  },

  已安装(){

  //拖放列的初始化

  this . columndropinit();

  //线条的拖放初始化

  this . rowdropinit();

  },

  方法:{

  //列拖动

  columnDropInit() {

  //第一步是获取列容器。

  const wrapper column=document . query selector(。el-table__header-wrapper tr

  );

  //第二步,为列容器指定相应的拖放规则。

  this . sortable=sortable . create(wrapper column,{

  动画:500,

  延迟:0,

  onEnd:(事件)={

  console.log(

  拖动后发现表头数据没有变化,需要手动更新表头数据,

  this.tableHeader

  );

  console.log(

  根据旧索引和新索引来更新,实际上是交换位置,

  event . ol index,

  event.newIndex

  );

  //接下来,进行索引的交换

  let temphambleheader=[.this . table header];//先保存一个临时变量头数据。

  让温度;//临时变量用于交换

  temp=tempHableHeader[event . old index-2];//注意这里-2是因为我在表格前面加了两列(复选框列和序列号列)。

  templatableheader[event . old index-2]=

  temphable header[event . new index-2];//如果没有这两列,序号就是正常的对应关系,不需要减2。

  tempHableHeader[event . new index-2]=temp;

  //重要的事情说三遍!

  //这里必须先清除头数据,然后在下一轮赋值,否则渲染会出错。

  //这里必须先清除头数据,然后在下一轮赋值,否则渲染会出错。

  //这里必须先清除头数据,然后在下一轮赋值,否则渲染会出错。

  this . table header=[];//可以尝试一下。

  这个。$nextTick(()={

  this . table header=temphable header;

  });

  },

  });

  },

  //线条拖动

  //我个人觉得没有必要加行拖,因为加了之后就不能双击选中行单元格的文字了。当然,你还是要听产品大佬们的安排。

  rowDropInit() {

  //第一步是获取行容器。

  const wrap perrow=document . query selector(。el-table__body-wrapper tbody

  );

  const that=this//保存指向的副本

  //第二步,为line容器指定对应的拖放规则。

  Sortable.create(wrapperRow,{

  onEnd({ newIndex,oldIndex }) {

  //这里有另外一种方法来区分上面的列拖放。

  //先删除原项,保存原项的副本,因为splice返回一个数组,数组中的第一项就是被删除的项。

  const currRow=that . table body . splice(ol index,1)[0];

  //然后将此项添加到新位置

  that.tableBody.splice(newIndex,0,currRow);

  },

  });

  },

  },

  };

  /脚本

  style lang=less 范围。myWrap {

  宽度:100%;

  身高:100%;

  框大小:边框-框;

  填充:25px

  /深/。el表{。El-表格_ _标题-包装器{

  tr {

  th {

  //将拖动样式设置得更好看

  光标:移动;

  }

  }

  }

  }

  }

  /风格

  最后附上www.sortablejs.com/或https://www.itxst.com/sortablejs/neuinffi.html,官网

  关于拖动插件sortable.js实现el-table表格的拖动效果的这篇文章到此为止。有关sortable.js表格的更多相关拖动内容,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: