table表格 新增顶部滚动条el-table(elment-ui), Table(iview)

需求:增加顶部滚动条,方便查看表格里面隐藏在后面的数据

1. el-table(elment-ui) 的实现方法

  • table表格上面添加一个div,外层设置为100%,内层div(内容区域)设置为table内容宽度
 	  <!-- 顶部滚动条 -->
      <div ref="topScroll" class="top-scroll">
        <div class="top-scroll-content" :style="{ width: topScrollWidth }"></div>
      </div>
      <!-- table区域 -->
      <el-table
        :data="list"
        empty-text="暂无数据"
        style="width: 100%"
        ref="tableRef"
      >
      	.....
      </el-table>
  • 顶部div设置样式,里面的div一定要设置高度,不设置的话滚动条出不来
.top-scroll {
  width: 100%;
  overflow-x: auto;
}
.top-scroll-content {
  /* 高度不设置的话滚动条出不来 */
  height: 1px; 
}
  • 滚动条数据设置
data(){
 return{
      topScrollWidth: 0,
      tableDom: null,
 }
},
methods:{
  // 该方法在获取列表数据后调用
  setScrollWidth() {
      //设置顶部滚顶条宽度值为表格的滚动宽度
    this.$nextTick(() => {
      this.topScrollWidth = this.$refs.tableRef.bodyWrapper.scrollWidth + 'px';
    })
  },
  getTable(){
    //在获取数据后,设置顶部滚动条的宽度
     getAllData(data).then(res => {
        this.data = res.list;
        this.setScrollWidth();
      })
  }
}
  • 监听滚动条的宽度,实现上下两个滚动条同步

watch:{
   topScrollWidth: {
      // 两个滚动条同时滚动
      handler(newVal, oldVal) {
        // 监听滚动条
        this.$nextTick(() => {
          this.tableDom = this.$refs.tableRef.bodyWrapper
          this.tableDom.addEventListener('scroll', () => {
             // 表格顶部滚动条与底部同步
            let scrollLeft = this.tableDom.scrollLeft
            this.$refs.topScroll.scrollTo(scrollLeft, 0);
          })
          let topScroll = this.$refs.topScroll
          topScroll.addEventListener('scroll', () => {
            // 表格底部滚动条与顶部同步
            let scrollLeft = topScroll.scrollLeft
            this.tableDom.scrollTo(scrollLeft, 0);
          })
        })
      },
      deep: true
    },
}
  • 效果图
    在这里插入图片描述

2. Table(iview) 的实现方法

  • table表格上面添加一个div
 	  <!-- 顶部滚动条 -->
      <div ref="topScroll" class="top-scroll">
        <div class="top-scroll-content" :style="{ width: topScrollWidth }"></div>
      </div>
      <!-- table区域 -->
      <el-table
        :data="list"
        empty-text="暂无数据"
        style="width: 100%"
        ref="tableRef"
      >
      	.....
      </el-table>
  • 顶部div设置样式
.top-scroll {
  width: 100%;
  overflow-x: auto;
}
.top-scroll-content {
  /* 高度不设置的话滚动条出不来 */
  height: 1px; 
}
  • 滚动条数据设置
data(){
 return{
      topScrollWidth: 0,
      tableDom: null,
 }
},
methods:{
  // 该方法在获取列表数据后调用
  setScrollWidth() {
      //设置顶部滚顶条宽度值为表格的滚动宽度
    this.$nextTick(() => {
    // 这里获取的dom (document.querySelector('.ivu-table-body table'))是表格内容区域
      this.topScrollWidth = document.querySelector('.ivu-table-body table').scrollWidth + 'px'
    })
  },
  getTable(){
    //在获取数据后,设置顶部滚动条的宽度
     getAllData(data).then(res => {
        this.data = res.list;
        this.setScrollWidth();
      })
  }
}
  • 监听滚动条的宽度,实现上下两个滚动条同步

watch: {
    topScrollWidth: {
      // 两个滚动条同时滚动
      handler(newVal, oldVal) {
        this.$nextTick(() => {
          this.tableDom = document.querySelector('.ivu-table-body')
          this.tableDom.addEventListener('scroll', () => {
            // 表格顶部滚动条与底部同步
            let scrollLeft = this.tableDom.scrollLeft
            this.$refs.topScroll.scrollTo(scrollLeft, 0);
          })
          let topScroll = this.$refs.topScroll
          topScroll.addEventListener('scroll', () => {
            // 表格底部滚动条与顶部同步
            let scrollLeft = topScroll.scrollLeft
            this.tableDom.scrollTo(scrollLeft, 0);
          })
        })
      },
      deep: true,
    },
 },
  • 效果图
    在这里插入图片描述
<think>好的,我现在需要解决用户提出的问题:在使用el-table时,当窗口缩小后,后面两列不可见的问题。用户希望找到解决方案。首先,我需要理解这个问题的具体情况。用户提到的是窗口缩小时,后面两列被隐藏,可能是因为表格宽度不够,导致列被挤压或者溢出,无法显示出来。 接下来,我需要回顾类似的问题和解决方案。例如,参考用户提供的引用中,有关于iView表格固定列导致滚动条无法拖动的问题,解决方案涉及样式调整和可能的JavaScript修复。此外,引用[2]提到了使用float和margin进行布局,可能对列宽的自适应有帮助。引用[3]提到了背景图片的设置,可能暂时不相关,但需要留意是否有样式覆盖的问题。 首先,考虑el-table的响应式设计。el-table本身是否支持自适应宽度?可能需要设置宽度为百分比或者使用flex布局。如果表格容器宽度不足,列可能会被挤压,尤其是当列数较多时。可能的解决方案包括启用横向滚动条,让用户可以通过滚动查看被隐藏的列。 在element-ui的文档中,el-table有一个属性叫做max-height或者height,可以设置固定高度,同时允许出现滚动条。但横向滚动可能需要设置表格的宽度为100%,或者为表格容器设置overflow-x: auto。不过,用户提到的是窗口缩小时后面两列不可见,可能需要确保表格容器能够随着窗口大小调整而自适应,并且当空间不足时出现滚动条。 另一个可能性是列宽设置不当。如果某些列的宽度被固定(例如使用width属性设置为固定像素),而其他列没有设置宽度,当窗口缩小时,未设置宽度的列可能被挤压,导致后面的列无法显示。这时候可能需要给列设置最小宽度,或者使用弹性布局来分配空间。 此外,参考引用[2]中的布局方法,可能需要调整表格父容器的布局方式,比如使用flex布局,左侧固定,右侧自适应,或者确保表格容器能够正确扩展宽度。 可能的解决方案步骤: 1. 检查表格容器的样式,确保其宽度能够自适应父容器,例如设置width: 100%或者使用flex-grow。 2. 启用el-table的横向滚动条,可能需要设置合适的列宽或最小宽度,避免列被挤压。 3. 使用CSS媒体查询,在窗口较小时调整列宽或隐藏部分列,但这可能影响用户体验。 4. 如果使用固定列(fixed),可能会遇到滚动条无法拖动的问题,需要参考引用[1]中的方法,调整z-index或样式覆盖。 具体实施时,可能需要为el-table添加样式,例如: ```css .el-table { width: 100%; overflow-x: auto; } ``` 同时,检查列定义中的width是否合理,可能需要将部分列的width设置为百分比或者min-width,防止被挤压。例如: ```html <el-table :data="tableData" style="width: 100%"> <el-table-column prop="date" label="日期" min-width="150"></el-table-column> <el-table-column prop="name" label="姓名" min-width="150"></el-table-column> <!-- 其他列 --> </el-table> ``` 使用min-width可以确保列不会被压缩到指定宽度以下,当空间不足时,表格会出现横向滚动条。 此外,如果表格被包裹在一个容器中,需要确保该容器也允许溢出滚动。例如: ```html <div class="table-container"> <el-table :data="tableData"> <!-- 列定义 --> </el-table> </div> <style> .table-container { width: 100%; overflow-x: auto; } </style> ``` 这样,当表格内容超出容器宽度时,会出现横向滚动条,用户可以通过滚动查看被隐藏的列。 如果问题仍然存在,可能需要检查是否有父元素的样式限制了宽度,或者是否有其他CSS覆盖了el-table的默认行为。例如,某些布局中的float或position属性可能会影响表格的宽度计算。这时候需要参考引用[2]中的布局调整方法,确保表格所在的容器正确自适应。 总结可能的解决方案: 1. 确保表格容器宽度自适应,并启用横向滚动。 2. 设置列的min-width防止过度挤压。 3. 检查父容器的布局,避免样式冲突。 4. 如有固定列,调整相关样式确保滚动条可用。 最后,需要验证这些方案是否有效,可能需要编写示例代码进行测试,确保在窗口缩小时,后面两列可以通过滚动条访问,而不是被隐藏或遮挡。</think>要解决`el-table`在窗口缩小时后面两列不可见的问题,可以通过以下步骤实现: ### 解决方案 1. **启用横向滚动条** 确保表格容器允许横向滚动。为表格外层添加一个容器,并设置`overflow-x: auto`: ```html <div class="table-wrapper"> <el-table :data="tableData" style="width: 100%"> <!-- 列定义 --> </el-table> </div> ``` ```css .table-wrapper { width: 100%; overflow-x: auto; } ``` 2. **设置列的最小宽度** 为需要完整展示的列设置`min-width`,避免列被过度挤压: ```html <el-table-column prop="date" label="日期" min-width="200" <!-- 设置最小宽度 --> ></el-table-column> ``` 3. **调整表格自适应布局** 若表格父容器为弹性布局(如`flex`),需确保容器能正确扩展宽度: ```css .parent-container { display: flex; flex-direction: column; width: 100%; } ``` 4. **处理固定列的特殊情况** 如果使用了固定列(`fixed`属性),需检查滚动条是否被遮挡。可通过调整`z-index`或修改样式: ```css .el-table__fixed-right { height: auto !important; /* 避免固定列高度异常 */ z-index: 3; /* 确保滚动条在顶层 */ } ``` ### 示例代码 ```html <template> <div class="table-wrapper"> <el-table :data="tableData" style="width: 100%" :header-cell-style="{ background: '#f5f7fa' }"
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值