el-table有横向滚动条时,最后一行数据被横向滚动条遮挡,且不出现纵向滚动条;只有当鼠标移到fixed列才能纵向滚动,移到非fixed列无法纵向滚动。

问题背景

项目使用的vue2,el-table有横向滚动条时,最后一行数据被横向滚动条遮挡,且不出现纵向滚动条;只有当鼠标移到fixed列才能纵向滚动,移到非fixed列无法纵向滚动。

见下图:最后一行被遮挡住了一部分理应出现纵向滚动条可以纵向滚动,但实际页面没有显示纵向滚动条,只有当鼠标移动到固定列时才可以纵向滚动

实现方式

我们分析el-table滚动条的实现原理,node_modules/element-ui/lib/table.js源代码(见下图)中有提到scrollY变量为true时出现纵向滚动条,在updateScrollY方法中设置scrollY的值,但updateScrollY方法中并没有把横向滚动条的高度算进去导致计算有个误差,所以才会出现如题所述的问题。

// table.js中的源代码(计算什么时候出现纵向滚动条)
TableLayout.prototype.updateScrollY = function updateScrollY() {
    var height = this.height;
    if (height === null) return false;
    var bodyWrapper = this.table.bodyWrapper;
    if (this.table.$el && bodyWrapper) {
      var body = bodyWrapper.querySelector('.el-table__body');
      var prevScrollY = this.scrollY;
      var scrollY = body.offsetHeight > this.bodyHeight;
      this.scrollY = scrollY;
      return prevScrollY !== scrollY;
    }
    return false;
  };

我们可以参照横向滚动条显示的判断逻辑,将updateScrollY方法进行优化,在我们自己封装的table组件内重写updateScrollY方法,重写方式如下:

<template>
    <el-table
      ref="tableRef"
      :height="tableHeight"
      :data="tableData"
      :border="false"
      v-bind="$attrs"
      style="width: 100%"
      :row-class-name="tableRowClassName"
      v-on="$listeners"
    >
    </el-table>
</template>

<script>
    ........... // 此处省略一堆代码
    this.$refs.tableRef.doLayout()
    this.fixScrollY()
    ........... // 此处省略一堆代码

    // fixbug: table有横向滚动条时,只有当鼠标移到fixed列才能纵向滚动,移到非fixed列无法纵向滚动
    fixScrollY() {
      if (this.$refs.tableRef?.layout.scrollX && !this.$refs.tableRef?.layout.scrollY) {
        this.$refs.tableRef.updateScrollY = () => { // 覆盖el-table的updateScrollY方法
          var height = this.tableHeight
          if (height === null) return false
          var bodyWrapper = this.$refs.tableRef.$refs['bodyWrapper']
          if (this.$refs.tableRef && bodyWrapper) {
            var body = this.$refs.tableRef.$refs['bodyWrapper'].querySelector('.el-table__body')
            var gutterWidth = this.$refs.tableRef.layout.gutterWidth // 横向滚动条高度
            var bodyHeight = this.$refs.tableRef.layout.scrollX ? (bodyWrapper.offsetHeight - gutterWidth) : bodyWrapper.offsetHeight
            var prevScrollY = this.$refs.tableRef.layout.scrollY
            var scrollY = body.offsetHeight > bodyHeight
            this.$refs.tableRef.layout.scrollY = scrollY
            if (scrollY) { // fixbug: 横向移动到最后表头错位
              this.$refs.tableRef.$refs['headerWrapper'].querySelector('colgroup col:last-child').width = gutterWidth
              this.$refs.tableRef.$refs['headerWrapper'].querySelector('thead th:last-child').style = {
                'width': gutterWidth,
                'display': 'inline-block'
              }
            }
            return prevScrollY !== scrollY
          }
          return false
        }
      }
    }
</script>

最终实现效果

如下图:出现了纵向滚动条,且鼠标移到任意一列都可纵向滚动。

大家若有更好的办法欢迎留言讨论~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/704980.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

R语言ggHoriPlot包绘制地平线图

数据和代码获取&#xff1a;请查看主页个人信息&#xff01;&#xff01;&#xff01; 关键词“地平线图” 1. 数据读取与处理 首先&#xff0c;从TSV文件中读取数据&#xff0c;并进行数据清洗和处理。 rm(listls()) pacman::p_load(tidyverse,ggalt,ggHoriPlot,hrbrthemes…

python接入汇率换算工具提高网站/小程序日活度

实时汇率换算工具可以帮助用户快速准确地计算不同货币之间最新的汇兑比例。无论是金融从业者或者是人们日常生活出行都会使用到&#xff0c;广泛用于国际结算、银行汇率查询应用、开展跨国贸易、投资等参考场景。 我们可以通过在网站或者小程序中接入这样一个小工具&#xff0…

【个人博客搭建】(23)购买服务器、域名、备案

1、服务器主要是为了有一个公网的IP地址&#xff0c;方便我们可以通过网络随时访问 2、域名是对IP地址的一个替代。简单说IP地址可能不方便记忆&#xff0c;但是自己配置的域名会简单些&#xff0c;另外暴露IP地址也不安全。(虽然也能通过域名找到IP) 3、备案。这是政策。简单所…

工业企业的物料主数据管理应该如何做?

前言&#xff1a;如果我们说主数据是企业的“黄金数据”&#xff0c;那么对于制造型企业来说物料主数据就是企业的“钻石”数据。物料主数据贯穿于制造型企业的设计、工艺、采购、生产、库存、物流、销售的各个环节。做好物料主数据管理&#xff0c;是企业保有竞争力的关键&…

【Python】已解决报错 TypeError: Missing 1 Required Positional Argument

本文摘要&#xff1a;【Python】使用 Python 中将字符串转换为数组&#xff0c;并总结提出了几种可用方案。 &#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博…

Nginx06-rewrite模块详解与实验

目录 写在前面Nginx06nginx rewriterewrite 模块return案例01 访问/admin/ 返回403案例02 域名间跳转 if案例03 只允许GET、POST请求&#xff0c;其他禁止访问 set案例04 设置是否处于维护状态&#xff0c;是则返回503&#xff0c;否则正常访问 rewrite案例05 域名跳转案例06 r…

C# WPF入门学习主线篇(二十五)—— 单向绑定、双向绑定

C# WPF入门学习主线篇&#xff08;二十五&#xff09;—— 单向绑定、双向绑定 在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;数据绑定是实现数据与UI控件同步的关键机制。本篇博客将详细介绍单向绑定和双向绑定的概念、使用场景以及代码示例。…

【仿真建模-anylogic】EventRate原理解析

Author&#xff1a;赵志乾 Date&#xff1a;2024-06-13 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 类图 2. 原理解析 EventOriginator是Anylogic中各类事件的父类&#xff0c;对外暴露的接口主要有: 函数功能boolean isActive()判定…

上午接到被裁员的通知,下午就收到涨薪30%的offer,我生怕公司反悔,当天就找HR签了离职协议,拿到了N+1赔偿!

大家好&#xff0c;我是瑶琴呀。 昨天看到一位网友分享自己被裁的经历&#xff1a;最近这段时间在面试&#xff0c;没成想上午刚被 HR 约谈裁员的事情&#xff0c;下午就收到下家公司涨薪 30% 的offer&#xff0c;这可真是天时人和&#xff0c;当天下午就找 HR 签了离职协议&a…

有一个主域名跟多个二级子域名时该怎么申请SSL证书?

当您拥有主域名以及多个子域名时&#xff0c;选择合适的SSL证书类型对于确保网站的安全性至关重要。以下是三种SSL证书类型的简要介绍&#xff1a; 单域名SSL证书&#xff1a; 功能&#xff1a;只能绑定单个域名&#xff0c;无论是主域名还是子域名。 适用场景&#xff1a;仅…

Linux系统使用Docker安装Dashy导航页结合内网穿透一键发布公网

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起&#xff0c;形成自己的导航…

比特币对接文档

比特币对接 地址分类 p2sk()p2skh(主网地址是以"1"开头,例如:16dN3XhaTejyZFy4hWompK2x8de2T46wA8; 测试网是以"m"或"n"开头, 例如:mvZjn2485hwxjVPJoLAZVyJKUDn8aGpBy5)p2sh (主网地址是以"3"开头,例如:33ZzFZZJcvtnLBWRdne6F9SpD9…

数据结构笔记1-19(补充之前没有提及的细节)

目录 算法的五大特征 时间复杂度 next数组 nextval数组 树结点的计算 满二叉树和完全二叉树 线索二叉树 树的存储结构 森林、树之间的转换 哈夫曼树的构造 这几个红框&#xff0c;因为之前在别的视频有学过了&#xff0c;故不再看了。如果到时候还有什么需要查缺补…

Linux内核编程(二)杂项设备模型驱动编写

本文目录 一、知识点1. Linux设备分类2. 设备号3. Linux 字符设备的几种编程模型 二、杂项设备模型API1. 杂项设备结构体2. 注册杂项设备3. 注销杂项设备4. copy_from_user5. copy_to_user 三、字符设备编程 查看&#xff1a;内核驱动程序编写环境搭建。 一、知识点 1. Linux设…

高考结束嗨一夏,AOC显示器暑期购机指南来了!

摘要&#xff1a;AOC显示器&#xff0c;暑期狂欢&#xff0c;近在眼前&#xff01; 历经三年紧张备战&#xff0c;高考已然画下句号。过去的时间里&#xff0c;你们挥洒汗水&#xff0c;刻苦学习&#xff0c;未来的时间里&#xff0c;也将迎来短暂的休憩嗨皮时光。这个暑假里&…

SaaS产品运营 | 千万不能踏入的PLG模式的六大误区

随着科技的迅速发展和市场竞争的日益激烈&#xff0c;越来越多的公司开始尝试采用PLG&#xff08;Product Led Growth&#xff0c;即产品驱动增长&#xff09;模式来推动其业务的发展。然而&#xff0c;尽管PLG模式在促进增长方面具有显著优势&#xff0c;但在实践中也容易出现…

一文学会Spring 实现事务,事务的隔离级别以及事务的传播机制

目录 一.Spring (Spring Boot) 实现事务 1.通过代码的方式手动实现事务 (手动档的车) 2.通过注解的方式实现声明式事务 (自动挡的车) 二.事务的4大特性(ACID) 三.事务的隔离级别 ①Mysql的事务隔离级别: ②Spring的事务隔离级别: 四.事务的传播机制 ①事务传播机制的概…

ASCII码表介绍

一、ASCII码是什么 ASCII&#xff08;American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff09;是基于拉丁字母的一套电脑编码系统。它可分为基于7位二进制数的标准版本和基于8位二进制数的扩展版本&#xff0c;标准版本主要用于显示现…

[AI Stability] 开源AI新利器:Stable Diffusion 3 Medium震撼发布!文本到图像再升级!

Stable Diffusion 3 Medium(SD3) 开源了&#xff0c;我们来看下。 关键要点 Stable Diffusion 3 Medium 是 Stability AI 迄今为止最先进的文本到图像开源模型。该模型的体积小巧&#xff0c;非常适合在消费级 PC 和笔记本电脑上运行&#xff0c;也适合在企业级 GPU 上运行。…

精彩回顾!安全智能体的前沿技术研究与实践

&#xff08;关注“安全极客”&#xff0c;回复“智能体”下载第一期系列专题PPT&#xff01;&#xff09; 近日&#xff0c;安全极客和Wisemodel社区联合发起并主办了“AISecurity”系列第1期&#xff1a;大模型与网络空间安全前沿探索线下活动。在这次活动中&#xff0c;云起…