vue elementui table去掉滚动条与实现表格自动滚动且无滚动条

当table内容列过多时,可通过height属性设置table高度以固定table高度、固定表头,使table内容可以滚动。

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

css 复制代码
// ----------修改elementui表格的默认样式-----------
.el-table__body-wrapper {
  &::-webkit-scrollbar { // 整个滚动条
    width: 0; // 纵向滚动条的宽度
    background: rgba(213,215,220,0.3);
    border: none;
  }
  &::-webkit-scrollbar-track { // 滚动条轨道
    border: none;
  }
}
// --------------------隐藏table gutter列和内容区右侧的空白 start
.el-table th.gutter{
  display: none;
  width:0
}
.el-table colgroup col[name='gutter']{
  display: none;
  width: 0;
}
.el-table__body{
  width: 100% !important;
}
// --------------------隐藏table gutter列和内容区右侧的空白 end

如果样式不想影响全局,可以使用样式穿透

css 复制代码
::v-deep .el-table__body-wrapper {
    // 整个滚动条
    &::-webkit-scrollbar {
        width: 0px; // 纵向滚动条的宽度
        background: rgba(213, 215, 220, 0.3);
        border: none;
    }
    // 滚动条轨道
    &::-webkit-scrollbar-track {
        border: none;
    }
}
// --------------------隐藏table gutter列和内容区右侧的空白 start
::v-deep .el-table th.gutter {
    display: none;
    width: 0
}
::v-deep .el-table colgroup col[name='gutter'] {
    display: none;
    width: 0;
}
// 这个样式不加的话内容哪里会缺一点,估计是因为滚动条哪里缺的没有补上
::v-deep .el-table__body {
    width: 100% !important;
}
// --------------------隐藏table gutter列和内容区右侧的空白 end

下面记录代码,亲测有效。

css 复制代码
<div class="leftTopEcharts1">
    <div class="alarm-table">
      <el-table :data="this.left1List1" style="width: 100%;" height="200" ref="table"
                @mouseenter.native="autoScroll(true)"
                @mouseleave.native="autoScroll">
        <el-table-column prop="typeName" label="告警类型" width="270" />
        <el-table-column prop="almEntCount" label="告警数" />
      </el-table>
    </div>
  </div>
css 复制代码
import { tableAutoScroll } from '@/utils/autoScroll'
mounted() {
    setTimeout(() => {
      // 想要滚动就必须设置表格高度,这里设置的高度是100%,即跟父元素等高
      this.tableHeight = "100%"
      this.infinitScroll()
    }, 500)
}

methods: {
 /** 表格自动滚动 */
    infinitScroll() {
      // 拿到表格挂载后的真实DOM
      const table = this.$refs.table;
      tableAutoScroll(table)
    },
}

autoScroll.js 工具类

css 复制代码
/** 表格自动滚动 */
export const tableAutoScroll = (table) => {
  // 拿到表格中承载数据的div元素
  const divData = table.bodyWrapper;
  divData.onmouseover = function () {
    clearInterval(t);
  }; //鼠标移入,停止滚动
  divData.onmouseout = function () {
    start();
  }; //鼠标移出,继续滚动

  // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素)
  let t;
  start();
  function start() {
    // 数据少于表格高度停止滚动
    if (divData.clientHeight >= divData.scrollHeight) {
      return;
    }
    t = setInterval(() => {
      // 元素自增距离顶部1像素
      divData.scrollTop += 1;
      // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度)
      if ( divData.clientHeight + divData.scrollTop == divData.scrollHeight ) {
        // 重置table距离顶部距离
        divData.scrollTop = 0;
      }
    }, 100);
  }
}
css 复制代码
.leftTopEcharts1 {
  height: 100%;
  width: 100%;
  background-image: url('~@/assets/meilinScreen/qyscaqydjc/biankuang.png');
  background-size: cover;
  background-size: 100% 100%;
  box-sizing: border-box;
  overflow: hidden;
}
.alarm-table {
  padding-left: 5%;
  padding-top: 3%;
  padding-right: 3%;
}
/*去除滚动的滚动条*/
::v-deep .el-table th.gutter{
  display: none;
  width:0
}
::v-deep.el-table colgroup col[name='gutter']{
  display: none;
  width: 0;
}
::v-deep .el-table__body{
  width: 100% !important;
}
::v-deep .el-table--scrollable-y .el-table__body-wrapper {
  overflow-y: hidden;
}
/*去除滚动的滚动条*/
相关推荐
m0_7482361110 分钟前
Calcite Web 项目常见问题解决方案
开发语言·前端·rust
Watermelo61722 分钟前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
m0_7482489424 分钟前
HTML5系列(11)-- Web 无障碍开发指南
前端·html·html5
m0_7482356135 分钟前
从零开始学前端之HTML(三)
前端·html
一个处女座的程序猿O(∩_∩)O2 小时前
小型 Vue 项目,该不该用 Pinia 、Vuex呢?
前端·javascript·vue.js
hackeroink6 小时前
【2024版】最新推荐好用的XSS漏洞扫描利用工具_xss扫描工具
前端·xss
迷雾漫步者7 小时前
Flutter组件————FloatingActionButton
前端·flutter·dart
向前看-8 小时前
验证码机制
前端·后端
燃先生._.9 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js