首页 > 其他分享 >el-table使用sortablejs推拽排序卡顿问题解决

el-table使用sortablejs推拽排序卡顿问题解决

时间:2024-08-19 15:52:58浏览次数:9  
标签:el const oldIndex 拖动 sortablejs table evt

使用sortablejs拖拽el-table排序时,对于纯文本表格,正常使用即可,不会卡顿

    initSort() {
      const tbody = document.querySelector('.el-table__body-wrapper tbody')
      const _this = this
      Sortable.create(tbody, {
        draggable: '.el-table__row',
        filter: ".handle",
        handle: ".allowDrag",
        preventOnFilter: false,
        onEnd: evt => {
          const {newIndex, oldIndex} = evt;
          const temp = _this.tableData[oldIndex];
          if (!temp || temp === "undefined") {
            return
          }
          const currRow = _this.tableData.splice(oldIndex, 1)[0];
          _this.tableData.splice(newIndex, 0, currRow);
        }
      })
    },
initSort在请求到数据后执行

 但是对于表格单元格中有嵌套表单组件,左右有固定fixed的列,这时推拽会卡顿

 解决思路:

选择拖动的行后将fixed列取消固定,开始拖动时将表单组件全部渲染成纯文本,拖动结束后再变成初始状态,也可以在拖动时将后面的列全部用骨架屏代替,只保留名称几列信息,拖动结束后再变成初始状态,可以给表格加loading渲染

代码:

     <el-table-column prop="fieldName" label="显示名称" width="200px" class-name="handle" :fixed="isFixed ? 'left' : false">
          <template slot-scope="scope">
            <template v-if="!isDrop">
              <el-input v-model="scope.row.fieldName"></el-input>
            </template>
            <template v-else>
              <span>{{ scope.row.fieldName }}</span>
            </template>
          </template>
        </el-table-column>
 initSort() {
      const tbody = document.querySelector('.el-table__body-wrapper tbody')
      const _this = this
      Sortable.create(tbody, {
        draggable: '.el-table__row',
        filter: ".handle",
        handle: ".allowDrag",
        preventOnFilter: false,
        onStart: function (/**Event*/evt) {
          // 是否拖动
          _this.isDrop = true;
        },
        onChoose: function (/**Event*/evt) {
      // 是否固定列 _this.isFixed = false; }, onEnd: evt => { _this.tableScreenLoading = true; const {newIndex, oldIndex} = evt; const temp = _this.tableData[oldIndex]; if (!temp || temp === "undefined") { return } const currRow = _this.tableData.splice(oldIndex, 1)[0]; _this.tableData.splice(newIndex, 0, currRow); setTimeout(() => { _this.isDrop = false; },1000) setTimeout(() => { _this.$refs.table.doLayout(); _this.tableScreenLoading = false; _this.isFixed = true; _this.scrollTable(10); },1200) } }) },

渲染后固定的列显示第一行,滚动条和非固定列显示在拖动结束那里

拖动后可以加滚动,随意滚动一下即可

    // 添加fixed列后 fixed列显示在第一行 让列表滚动一下
    scrollTable(pixels) {
      const tableBodyWrapper = this.$refs.table.$el.querySelector('.el-table__body-wrapper');
      if (tableBodyWrapper) {
        tableBodyWrapper.scrollTop += pixels;
      }
    },

 

标签:el,const,oldIndex,拖动,sortablejs,table,evt
From: https://www.cnblogs.com/Console-LIJIE/p/18367464

相关文章

  • 第二周,linux基础_vim、grep、sed、shell
    总结学过的权限,属性及ACL相关命令及选项,示例。结合vim几种模式,学会使用vim几个常见操作。1)如何打开文件。并在打开文件(命令模式)之后如何退出文件。2)打开文件(命令模式)之后,进入插入模式。并在插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。3)打开文件......
  • IMELM.DLL文件丢失导致程序无法运行问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个IMELM.DLL文件(挑选合适的版本文件)把它放入......
  • axios取消请求CancelToken的原理解析及用法示例
    文章目录一、axios的实例与请求流程二、CancelToken的作用三、CancelToken的实现原理四、取消请求的流程五、CancelToken用法六、利用拦截器取消请求1、axios请求拦截器2、axios响应拦截器3、利用路由导航守卫取消请求一、axios的实例与请求流程下图是axios实例......
  • 一款专为IntelliJ IDEA用户设计的插件,极大简化Spring项目中的API调试过程,功能强大(附源
    前言在软件开发过程中,尤其是SpringMVC(Boot)项目中,API调试调用是一项常见但繁琐的任务。现有的开发工具虽然提供了一些支持,但往往存在效率不高、操作复杂等问题。为了处理这些痛点,提升开发效率,一款新的工具应运而生。介绍CoolRequest是一款专为IntelliJIDEA用户设计的插......
  • 清除 Electron 中的缓存数据
    Electron将其缓存存储在以下文件夹中:window:C:\Users<user>\AppData\Roaming<yourAppName>\CacheLinux:/home//.config//Cache操作系统:/Users//Library/ApplicationSupport//Cacheletcache=app.getPath('cache');//获取缓存的路径constcachePath=path.......
  • Vue——el-option下拉框绑定,value为数字和字符串区别
    Vue——el-option下拉框绑定1、正常使用v-for进行遍历下拉框内容,如果需要增加一个自定义的值,则加一个el-optionel-option用法:参数说明类型可选值默认值value选项的值string/number/object——label选项的标签,若不设置则默认与v......
  • 【Python-办公自动化】1秒提取多个word表格汇总至1个excel内
    欢迎来到"花花ShowPython",一名热爱编程和分享知识的技术博主。在这里,我将与您一同探索Python的奥秘,分享编程技巧、项目实践和学习心得。无论您是编程新手还是资深开发者,都能在这里找到有价值的信息和灵感。自我介绍:我热衷于将复杂的技术概念以简单易懂的方式呈现给大家,......
  • VBA学习(48):利用ADO操作Excel工作表数据
    VBA可以利用ADO创建SQL,从而实现在不打开Excel工作簿的情况下,对工作表的数据进行读写等操作。对于数据量比较大的Excel工作簿,利用ADO模型可以大大提高性能。案例数据D盘有ExcelSQL数据库.xlsx工作簿,工作簿内有【员工信息】工作表,其字段包含工号、姓名、部门、性别和年龄。使......
  • 使用 preloadRouteComponents 提升 Nuxt 应用的性能
    title:使用preloadRouteComponents提升Nuxt应用的性能date:2024/8/19updated:2024/8/19author:cmdragonexcerpt:preloadRouteComponents是提升Nuxt应用性能的一个简单而有效的工具。通过在适当的时候预加载路由组件,你可以为用户提供更快速、更流畅的导航体验。......
  • Excel使用
    01Excel入门跨列居中:对齐方式-水平对齐-选定“跨列居中”(Office365版本)自动调整栏宽单栏调整:双击间隔线。多栏同宽调整:选定栏数,拖动任一栏宽度调整。(调整列亦同)。日期输入输入使用斜线格式,方便excel函数等功能计算使用使用“右键单元格格式-数字-日期”更换日期格式显......