elementui中多个table同步滚动

4 篇文章 0 订阅

问题描述

element-admin中同时使用多个table,要求头部固定,给每个并列的table设置max-height,通过监听一侧的table滚动情况去控制另外一侧的table滚动。

问题分析

table分成两部分,左侧是一个table,右侧是有去掉头部的多个table组成(动态生成),想要实现双向滚动要完成3个任务。

  • 左侧滚动控制右侧同步滚动
  • 右侧一个滚动控制右侧所有同步滚动
  • 右侧滚动控制左侧同步滚动

解决问题

重点:通过mouseover事件来开启/停止当前鼠标所在区域的scroll事件,因为同步滚动只能一边跟随另一边滚动,否则两边相互影响会导致滚动条滚动滞留现象。

  • 左侧table,若是在不同组件传值可以用vuex

    mounted(){
        let bodyWrapper = this.$refs.floorTableRef.bodyWrapper
        bodyWrapper.addEventListener('mouseover', (e) => {
          this.flag = true // 此处的flag判断是否主动滚动了当前table
          bodyWrapper.addEventListener('scroll', (evt) => {
            if(this.flag) {
              this.scrollTop = evt.target.scrollTop
            }
          })
        })
      }
    
    // 设置滚动高度
    initScroll(val) { 
        this.$nextTick(() => {
            let bodyWrappers = document.querySelector('.h-table .el-table__body-wrapper');
            bodyWrappers.scrollTop = val
        })   
    },
    
  • 右侧多table

    mounted() {
        // 监听事件
        let bodyWrappers = document.querySelectorAll('.h-table2 .el-table__body-wrapper');
        
        // 监听鼠标是否在当前table,此处也可以监听一个所有table的父元素
        bodyWrappers.forEach((item) => {
          item.addEventListener('mouseover', (evt) => {
            this.flag = false
          })
        })
        
        // 主动滚动就赋值,否知不赋值
        bodyWrappers.forEach((item) => {
          item.addEventListener('scroll', (evt) => {
            if(!this.flag) {
              this.uscrollTop = evt.target.scrollTop
            }
          }, true)
        })
      },
      methods: {
        // 设置滚动高度
        initScroll(val) {
          this.$nextTick(() => {
            let bodyWrappers = document.querySelectorAll('.h-table2 .el-table__body-wrapper');
            bodyWrappers.forEach((item) => {
              item.scrollTop = val
            })
          })   
        }
     }
    

    衍生问题

    右侧的table出现不能滚动到底部的问题待解决。。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: ElementUI 的表格(Table)组件在列过多时会出现横向滚动条。如果你希望在表格的底部显示一个固定的横向滚动条,可以在表格外层包裹一个固定高度的容器,并给该容器设置 `overflow-x: auto` 样式。这样即可实现表格的横向滚动条固定在容器底部的效果。 具体实现步骤如下: 1. 在模板,将 Table 组件包裹在一个具有固定高度的 div 容器,如下所示: ``` <div class="table-container"> <el-table :data="tableData" style="width: 100%"> <!-- 表格列的定义 --> </el-table> </div> ``` 2. 在样式表,为这个容器设置 `overflow-x: auto` 样式,并将 Table 组件的样式设置为 `width: 100%`,如下所示: ``` .table-container { height: 300px; /* 设置容器高度 */ overflow-x: auto; /* 显示横向滚动条 */ } .el-table { width: 100%; /* 设置表格宽度为容器宽度 */ } ``` 这样就可以实现 ElementUI 表格的横向滚动条了。 ### 回答2: ElementUI 是一款基于 Vue.js 的组件库,在前端开发可以很方便地使用它来构建界面。其Table 组件是最常用的一个组件之一。Table 组件的作用是在页面上呈现数据表格,可以进行分页、排序、筛选、展开等操作。但是,在数据过多的情况下,表格的宽度也会跟着增加,影响页面的布局和用户的体验。因此,Table 组件添加横向滚动条可以解决这个问题。 要实现 Table 组件的横向滚动条,只需要在外层加一个 div 包裹 Table 组件,并设置其样式为 overflow-x: auto; 即可。代码如下: ``` <template> <div class="table-container"> <el-table :data="tableData"> <!-- 你的表格内容 --> </el-table> </div> </template> ``` ``` .table-container { overflow-x: auto; } ``` 上面的代码,使用了一个名为 “.table-container” 的 div 来包裹 Table 组件,将其宽度固定,设置 overflow-x 属性为 auto,这样当表格的宽度超出容器宽度时就会出现横向滚动条,可以通过鼠标滚动或者拖动滚动条来查看表格的全部内容。 需要注意的是,为了让表格显示更美观,我们还可以给表头加一个固定的宽度,避免产生“抖动”现象,代码如下: ``` .el-table thead th { width: 200px; } ``` 上面的代码,将表头的宽度设定为 200px,如果你的表头内容长度不确定可以自行更改。 在使用 Table 组件的过程,添加横向滚动条可以优化界面布局,提高用户体验。因此,在处理大量数据时,就可以使用该方法来较好地展示数据,使用户更加方便地进行选择,操作,提高效率。 ### 回答3: ElementUI 是一个非常流行的 Vue.js 组件库,其Table 组件为我们展示表格数据提供了很大的帮助。Table 组件支持诸多的功能,除了基本的表格数据展示之外,还可以实现数据筛选、分页、排序等功能。其,横向滚动条是 Table 组件一个非常实用的功能,它的作用是当表格的列宽度超过表格宽度时自动出现横向滚动条,从而让表格更加美观、易用。 针对 ElementUI Table 组件横向滚动条的使用,需要我们注意以下几点: 1. 为表格设置固定宽度或最小宽度,以保证表格不会变形或出现错位现象。 2. 为需要横向滚动的列设置宽度。可以使用百分比、像素或者 calc() 函数来设置列宽,根据实际需求来灵活调整宽度。 3. 使用 Table 组件的外部滚动功能,通过设置表格容器的 max-height、overflow等属性来实现滚动条的出现。 4. 设置 Table 组件的 border 属性为 true,可以更好地让用户感知表格的边界。 对于横向滚动条的实现,需要设置 Table 组件的属性 scopedSlots,使用 v-slot:default 来包裹需要横向滚动的列,从而实现对列的控制和样式的设置。具体的代码实现可以参考 ElementUI 官方文档,或者互联网上的一些教程和案例,结合实际情况进行调整和优化。 总之,ElementUI Table 组件的横向滚动条是一个非常实用的功能,可以通过设置表格的宽度、列宽度等属性来实现。同时,还需要注意表格的样式和布局,结合实际情况进行灵活调整和优化,以达到更好的用户使用体验。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值