vue element ui table表格高度自适应屏幕大小变化,固定表头及去除table滚动条

2,625 阅读2分钟

我正在参加 「掘金日新计划 · 4 月更文挑战」 ,本文讲解element ui table表格高度自适应屏幕大小变化,固定表头以及去除table表格滚动条

固定表头

要实现在窗口大小改变时自适应表格高度,并固定表头,你可以按照以下步骤进行操作:

  1. 在模板中使用ref属性给el-table组件命名,以便在JavaScript代码中引用它。例如:
<template>
  <div ref="tableHeight" class="table-container">
    <el-table
      ref="tableData"
      v-loading="listLoading"
      :data="dataFunction"
      element-loading-text="Loading"
      fit
      stripe
      border
      row-key="id"
      :height="tableHeight"
      highlight-current-row
      :header-cell-style="{'text-align':'center'}"
      >
      <el-table-column align="center" label="ID" width="95">
        <template slot-scope="scope">
          {{ scope.row.id }}
        </template>
      </el-table-column>
      <el-table-column prop="date" label="日期"></el-table-column>
      <el-table-column prop="name" label="姓名"></el-table-column>
      <el-table-column prop="address" label="地址"></el-table-column>
    </el-table>
    <el-card ref="cardHeight">
      <el-pagination
        small
        layout="total, prev, pager, next, jumper"
        :page-size="pageSize"
        :current-page="currentPage"
        :total="total"
        @current-change="handleCurrentChange"
      />
    </el-card>
  </div>
</template>

  1. 在mounted生命周期中获取表格元素的高度和窗口的高度,table表格距离顶部高度,以便在窗口大小或表格大小改变时重新计算表格高度。
data() {
        return {
            dialogInfo: { // 数据调整 新增/修改 内容
                tableDialogVisible: false, // dialog是否显示
                title: '新增数据'
            },
            currentPage: 1, // 当前页码
            total: 100, // 总条目数
            pageSize: 50, // 每页数据
            tableHeight: 0
        }
    },
    mounted() {
        this.$nextTick(() => {
            // 自适应表格高度
            this.tableHeight = window.innerHeight - 50 - this.$refs.tableData.$el.offsetTop - this.$refs.cardHeight.$el.offsetHeight;
            // 监听窗口大小变化
            const self = this;
            window.onresize = function() {
                self.tableHeight = window.innerHeight - self.$refs.tableData.$el.offsetTop - self.$refs.cardHeight.$el.offsetHeight
            }
        })
    },

注释: 这里说明减去五十是navbar的高度

这将使表头在滚动时保持固定。

效果如下

image.png

去除滚动条

现在需求是右侧滚动条不好看,需要去除滚动条,并隐藏滚动条所占列的位置。让他可以滚动但是不出现滚动条,不然即时隐藏了滚动条也会有一个空白列影响占位的。

这个你会发现 右侧会出现一个滚动条,我认为是很丑的,那么怎么去掉呢,很简单,几行css样式即可实现右侧滚动条去除,在网上找到一些方法 如这样处理

// ----------修改elementui表格的默认样式-----------
.el-table__body-wrapper {
  &::-webkit-scrollbar { // 整个滚动条
    width: 0; // 纵向滚动条的宽度
    background: rgba(213,215,220,0.3);
    border: none;
  }
  &::-webkit-scrollbar-track { // 滚动条轨道
    border: none;
  }
} 

.el-table th.gutter{
  display: none;
  width:0
}
.el-table colgroup col[name='gutter']{
  display: none;
  width: 0;
}
.el-table__body{
  width: 100% !important;
}

image.png

这样仅能实现把那个滚动条颜色去掉 滚动条那个照样占位,并不能真的实现滚动条去除,而且还不美观。 使用下列代码可以完美实现滚动条去除

代码如下:

// table 右侧滚动条去除
::-webkit-scrollbar {
  width: 1px;
  height: 1px;
}
  /* 滚动条的滑块 */
::-webkit-scrollbar-thumb {
  background-color: #a1a3a9;
  border-radius: 0px;
}

实现效果:

image.png

滚动条没有了,右侧占位也没了,果然美观了很多

❤️ 谢谢支持

以上便是本次分享的全部内容,希望对你有所帮助^_^

如果你有任何想法和疑问,欢迎留言~ 一起探讨

点赞收藏不迷路