el-table实现固定列,及解决固定列导致部分滚动条无法拖动的问题

一、el-table实现固定列

当数据量动态变化时,可以为 Table 设置一个最大高度。

通过设置max-height属性为 Table 指定最大高度。此时若表格所需的高度大于最大高度,则会显示一个滚动条。

<div class="zn-filter-table">
    <!-- 表格-->
    <el-table class="table-box" ref="table" :data="tableData" style="width: 100%;" max-height="580" border stripe @selection-change="handleSelectionChange"
      :header-cell-style="{'text-align':'center',}">
        <el-table-column type="selection" width="55" align="center" v-if="multiple"></el-        table-column>
         <el-table-column>
            XXXX
        </el-table-column>
        <el-table-column label="操作" align="center" width="150" class="table-fixed-right" fixed="right">
        <template slot-scope="scope">
          <el-button size="mini" type="text" @click="handleSelect(scope.row)">详情</el-button>
          <!-- <el-button size="mini" type="text" @click="handleDelete(scope.row)" class="mpc_del">删除</el-button> -->
          <el-dropdown size="small" type="primary" trigger="hover" style="margin-left: 10px;">
            <span style="color: #1890FF;font-size: 12px;">更多</span>
            <el-dropdown-menu slot="dropdown">
              <div v-for="item in buttons" :key="item.value">
                <el-dropdown-item v-if="item.value === 'del'" @click.native="handleDelete(scope.row)" class="mpc_del" v-hasPermi="item.hasPermi">{{item.label}}</el-dropdown-item>
                <el-dropdown-item v-else @click.native="handleUpdate(scope.row,item.value)" style="font-size: 12px;color: #1890FF;" v-hasPermi="item.hasPermi">{{item.label}}</el-dropdown-item>
              </div>
            </el-dropdown-menu>
          </el-dropdown>
        </template>
      </el-table-column>
    </table>

fixed属性:列是否固定在左侧或者右侧,true 表示固定在左侧;可选值:true, left, right

二、同用样式配置

框架之间引用过来的组件会和elementUi中的组件存在差异,因此需要一些通用样式,样式修改如下:

<style>
  .zn-filter-table {
    /* border: 1px solid blue; */
  }

  .zn-filter-table .el-table-column--selection .cell {
    padding-right: 10px !important;
  }

  .zn-filter-table .el-table__fixed-body-wrapper .el-table__body {
    /* 这个得自己调试看多少合适 */
    padding-bottom: 20px;
  }

  /* 固定列高度与表格高度不一致 */

  .zn-filter-table .el-table__fixed,
  .zn-filter-table .el-table__fixed-right {
    height: calc(100% - 33px) !important;
    /* height: 100% !important; */
    right: 0 !important;
    /* 这个得自己调试看多少合适 */
    bottom: 20px !important;
  }

  .zn-filter-table .el-table__fixed::before,
  .zn-filter-table .el-table__fixed-right::before {
    background: transparent !important;
    /* 去掉固定列下方的横线, 样式优化 */
    display: none;
  }


  .table-fixed-right {}
</style>

三、解决 el-table 固定列 el-table__fixed 导致部分滚动条无法拖动的问题

当给 el-table 表格的列添加了 fixed 属性之后,我们可以发现,被固定的部分虽然鼠标悬浮时会显示滚动条,但却无法拖动,通过修改表格固定列的高度,使固定列无法遮住滚动条,即可实现无障碍拖动。

 

 四、滚动条样式设置

<style scoped>
  
  /* // 滚动条样式 */
/* // 胶囊背景色 */
::v-deep .el-table__body-wrapper::-webkit-srollbar-track {
    background-color: rgba(255, 255, 255, 0);
}
/* //可设置胶囊宽高 */
::v-deep .el-table__body-wrapper::-webkit-scrollbar {
    height: 12px;
    opacity: 0.5;
}
/* 设置胶囊色 */
::v-deep .el-table__body-wrapper::-webkit-scrollbar-thumb {
    border-radius: 15px;
    background-color: #cdd9e6;
}
</style>

五、动态修改el-table表格滚动条,控制表格高度

1.在el-table中添加动态高度

:max-height="tableHeight" 

2.定义动态高度变量

3.写动态高度方法

created() {
      this.tableHeight = window.innerHeight - 346
    },

 4.监听窗口发生变化时表格高度动态变化

mounted() {
      this.handleTableHeight();
    },
    methods: {
      handleTableHeight: function () {
        var _this = this;
        window.onresize = () => {
          _this.tableHeight = window.innerHeight - 346
        };

      },
    }

<think>我们正在解决el-table中fixed无法随滚轮上下滚动的问题。根据引用内容,我们可以找到两种解决方案:1.修改固定的高度,使其不遮挡滚动条(方案一)。2.修改固定的鼠标事件,实现事件穿透(方案二)。但是,用户的问题描述是“fixed不随滚轮上下滚动”,而引用中主要解决的是滚动条无法拖动或滚动速度慢的问题。因此,我们需要区分问题-如果问题固定内的滚动条无法拖动,那么引用中的两种方案可以解决-如果问题是整个表格的滚动条滚动时,固定的内容不随之上下滚动(即固定的内容应该与表格主体一起滚动,但实际上没有滚动),那么这可能是另一个问题。然而,根据ElementUI的文档,固定(fixed)的设计就是固定在左侧或右侧,不随水平滚动而移动,但垂直滚动时应该与表格主体一起上下滚动。如果固定在垂直滚动时没有跟随滚动,那可能是样式或布局问题。但用户描述的是“不随滚轮上下滚动”,可能是指使用鼠标滚轮滚动表格时,固定的内容不跟随滚动。正常情况下,固定在垂直方向上是应该跟随滚动的。如果出现不滚动的情况,可能是由于固定的布局问题。根据引用[2]提到,在IE浏览器下固定触发滑轮滚动时移动速度缓慢,而他们的解决方案是禁用固定的鼠标事件(pointer-events:none),然后对内部单元格重新启用(pointer-events:auto)。这个方案实际上是为了解决滚动速度问题,但同时也可能解决滚动事件穿透的问题。因此,我们可以尝试使用引用中提供的方案二(鼠标事件穿透)来解决固定不随滚轮滚动的问题。因为固定可能覆盖在滚动条上,导致滚动事件没有被表格主体捕获,通过事件穿透,可以让滚动事件作用到表格主体上。具体步骤:方案一(调整高度)可能不适用于此问题,因为它是为了让滚动条不被遮挡,从而可以拖动。而我们的问题是滚轮滚动时固定不跟随。方案二(事件穿透)可能更有效,因为它允许滚动事件穿透固定,被底层的表格主体接收到,从而触发整个表格的滚动,包括固定。因此,我们采用方案二:1.固定添加`pointer-events:none`,这样固定本身不会拦截鼠标事件(包括滚轮事件)。2.固定内部的单元格(td和th)重新启用鼠标事件`pointer-events:auto`,这样单元格内的交互(如点击)仍然有效。这样,当鼠标在固定上滚动时,滚轮事件会穿透到表格主体,从而触发整个表格的滚动,固定也会随着表格主体一起滚动。代码实现(CSS):```css/*整个固定固定右侧的,禁用鼠标事件*/.el-table__fixed,.el-table__fixed-right{pointer-events:none;}/*固定中的单元格(包括表头和表格体)重新启用鼠标事件,以便单元格内的交互*/.el-table__fixedtd,.el-table__fixedth,.el-table__fixed-righttd,.el-table__fixed-rightth{pointer-events:auto;}```注意:如果使用less或scss,可以按照引用中的less语法。另外,引用[2]中提到,在IE浏览器下,这种方法还可以解决滚动速度缓慢的问题。如果问题仍然存在,可能需要检查表格的布局和样式,确保固定的高度和位置正确。由于用户的问题描述可能不够具体,我们提供了这个通用的解决方案。如果用户有更详细的问题描述,可以进一步调整。生成相关问题:1.如何解决el-table固定在垂直滚动时不同步的问题?2.除了CSS方法,还有没有其他方法解决el-table固定的滚动问题?3.el-table固定在IE浏览器下滚动缓慢的原因是什么?</think>### 解决 el-table 固定不随滚轮滚动的问题Element UI 的 el-table 中使用固定(fixed)时,可能出现固定内容不随滚轮上下滚动的问题。以下是两种经过验证的解决方案: #### 方案一:调整固定高度(推荐) 通过修改固定高度使其不遮挡滚动条: ```css /* 调整固定高度 */ ::v-deep .el-table__fixed { height: calc(100% - 15px) !important; /* 减去滚动条高度 */ } /* 消除固定底部伪元素 */ ::v-deep .el-table__fixed:before { height: 0 !important; } ``` **原理**: 固定默认高度为 `100%`,会覆盖表格滚动条。通过 `calc(100% - 15px)` 让出滚动条空间,使滚动操作可穿透到下层表格[^1]。 #### 方案二:鼠标事件穿透 通过 CSS 事件穿透实现滚动同步: ```css /* 禁用固定容器事件 */ ::v-deep .el-table__fixed, ::v-deep .el-table__fixed-right { pointer-events: none; } /* 单独启用单元格事件 */ ::v-deep .el-table__fixed td, ::v-deep .el-table__fixed th, ::v-deep .el-table__fixed-right td, ::v-deep .el-table__fixed-right th { pointer-events: auto; } ``` **原理**: `pointer-events: none` 让鼠标事件穿透固定容器,而 `pointer-events: auto` 保留单元格的交互能力,确保滚动事件能传递到表格主体[^1][^2]。 #### 效果对比 | 方案 | 兼容性 | 操作体验 | 额外影响 | |------------|-------------|---------------|---------------| | 高度调整 | 所有浏览器 | 滚动条完全可见 | 可能需微调高度 | | 事件穿透 | IE需特殊处理 | 无缝滚动 | 需单独处理交互 | #### 注意事项 1. 在 IE 浏览器中,事件穿透方案可能导致滚动速度变慢,可添加以下优化: ```css /* IE 滚动优化 */ ::v-deep .el-table__fixed-body-wrapper { -ms-overflow-style: none; /* 隐藏滚动条 */ } ``` 2. 如果表格有横向滚动条,需要同步调整宽度: ```css ::v-deep .el-table__fixed { width: auto !important; /* 避免宽度溢出 */ } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值