【前端】vue3+elment plus实现table表格右侧滑动分页加载

简介: vue3+elment plus实现table表格右侧滑动分页加载

具体要实现的需求

前段时间实现实现一个表格功能由于一行数据表较多,所以用到el-table表格固定表头,固定头两列和最后一列,底部有左右滑动的滚动条。一页展示二十条数据,需要实现滚动分页功能,table滚动条到底部的时候可自动加载第二页数据,在底部加载第二页数据的时候要有loading加载样式,底部没有用到分页Pagination 标签分页样式。在实现的过程也遇到很多的坑,还好最后把功能实现了,在这里做下总结。大家有好的方法和建议可以在评论区交流。

Element plus 查询table表格组件demo

打开elment plus组件找到table表格可以看到里面有固定列demo代码,但是demo使用跟我们业务需求有一定的差距,需要加入自己的业务需求代码处理才能是吸纳相应的功能,一开始参考了elment plus里面Scrollbar 滚动条标签来做,并没有成功实现。后来换了一种方式来做,代码就在下面。
在这里插入图片描述

### elment 监测table右侧滚动条到底部代码
elment和elment plus中加入addEventListener监听还是有区别的,请看代码你就明白了

this.$refs.multipleTable.bodyWrapper.addEventListener('scroll', (res) => {
          let height = res.target
          let clientHeight = height.clientHeight
          let scrollTop = height.scrollTop
          let scrollHeight = height.scrollHeight
          if (clientHeight + scrollTop + 50> scrollHeight) {
            this.currentPage += 1;
            this.getDataList()
          }
        })

elment plus监测table右侧滚动条到底部代码

  this.$nextTick(() => {
      document.querySelector(".el-scrollbar__wrap.el-scrollbar__wrap--hidden-default").addEventListener('scroll', (res: any) => {
        let scrollTop = res.target.scrollTop;
        let winHeight = res.target.clientHeight;
        let scrollHeight = res.target.scrollHeight;
        if (scrollTop + winHeight + 50 > scrollHeight && !this.busyScroll) {
          this.currentPage += 1;
          this.getDataList()
        }
      })
    })

替换loading加载样式

替换loading样式代码,vue样式代码用到了v-sort槽标签处理。

       <template v-slot:append style="text-align: center">
          <div class="table-loading" style="height: 50px;">
          </div>
        </template>
      </el-table>

调用 this.getDataList()方法loading为true,接口返回是loading为this.loading = false;,关闭loading加载。

 getDataList() {
 this.loading = true;
    const listLoading= ElLoading.service({
      target: document.querySelector(".table-loading") as HTMLElement,
      lock: true
    })
     const pageParam = {
      pageIndex: this.currentPage,
      limit: this.pageSize,
      param: this.param
    };
    http.post('localhost/page/list', pageParam).then(res => {
      this.list = [...this.lmodelList, ...res.data.data];
      this.totalPages = res.data.totalPages;
      this.loading = false;
      listLoading.close()
    })
    }

总结

在前端的路上要不断的学习,实践,总结。这一次做一次整理总结一下。方便后期遇到相似的问题的可以有参考思路。也便于其他编程伙伴查阅学习。欢迎互相关注交流。

相关文章
|
2月前
|
JavaScript 前端开发 API
Vue 3:下一代前端框架革新
Vue 3:下一代前端框架革新
414 106
|
2月前
|
JavaScript 前端开发 编译器
Vue 3:下一代前端框架的革新
Vue 3:下一代前端框架的革新
347 103
|
2月前
|
JavaScript 前端开发 API
Vue 3:下一代前端框架的革命
Vue 3:下一代前端框架的革命
314 104
|
2月前
|
JavaScript 前端开发 API
Vue 3:下一代前端框架的革命
Vue 3:下一代前端框架的革命
246 102
|
2月前
|
JavaScript 前端开发 算法
Vue 3:下一代前端框架的革命性进化
Vue 3:下一代前端框架的革命性进化
352 103
|
2月前
|
JavaScript 前端开发 编译器
Vue 3:现代前端开发的新范式
Vue 3:现代前端开发的新范式
257 104
|
2月前
|
JavaScript 前端开发 编译器
Vue 3:下一代前端框架革新
Vue 3:下一代前端框架革新
270 104
|
4月前
|
JavaScript 前端开发 编译器
Vue 3 深度解析:现代前端开发的革新引擎
Vue 3 深度解析:现代前端开发的革新引擎
219 6
|
3月前
|
JavaScript 前端开发 API
Vue 3:现代前端开发的革新之作
Vue 3:现代前端开发的革新之作
|
3月前
|
JavaScript 前端开发 安全
Vue 3:现代前端开发的全新体验
Vue 3:现代前端开发的全新体验

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
  • 2
    前端工程化演进之路:从手工作坊到AI驱动的智能化开发
  • 3
    Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式