【el-table滚动事件】el-table表格滚动时,获取可视窗口内的行数据

一个简单的获取内容的办法
表格部分,主要是ref写一下

javascript 复制代码
 <el-table :data="tableData" ref="tableRef"> </el-table>

进入页面的时候绑定监听

javascript 复制代码
mounted(){
// 绑定滚动事件
                this.$nextTick(() => {
                    const table = this.$refs.tableRef;
                    const scrollBody = table.$el.querySelector(".el-table__body-wrapper");

                    // 1. 手动绑定滚动事件
                    scrollBody.addEventListener("scroll", this.fangdou);

                    // 2. 初始计算一次可视行
                    this.fangdou();

                    // 3. 监听窗口变化(可选)
                    window.addEventListener("resize", this.fangdou);
                });
}

函数部分,增加了一层防抖。滚动停止再执行,不然执行的太频繁了

逻辑就是算出可视区域的高度,然后行要固定高,每行的高度你算一下或者写个固定的多少,这样就可以通过可视高度/行高得到,目前一次能拿到多少条。然后通过滚动条到顶部的位置距离,算出已经滚动过去多少个了,最后算出来的数量在表格内数组里抽数据

javascript 复制代码
methods(){
				fangdou(e) {
                    // 清除之前的定时器
                    if (this.scrollTimer) clearTimeout(this.scrollTimer);
                    // 设置新的定时器(延迟500ms执行)
                    this.scrollTimer = setTimeout(() => {
                        this.handleScroll();
                    }, 500);
                },
                handleScroll() {
                    const table = this.$refs.tableRef;
                    const scrollBody = table.$el.querySelector(".el-table__body-wrapper");

                    // 获取滚动位置和可视区域高度
                    const scrollTop = scrollBody.scrollTop;
                    const visibleHeight = scrollBody.clientHeight;
                    // 计算起始行和结束行索引
                    const startIndex = Math.floor(scrollTop / 50);
                    const endIndex = Math.min(startIndex + Math.ceil(visibleHeight / 50), this.tableData.length - 1);
                    // 获取可视行数据
                    const visibleRows = this.tableData.slice(startIndex, endIndex);
                    this.wdArr = [];
                    visibleRows.forEach((item) => {
                        // 未读状态,并有考核的数据才查看是否已读
                        if (item.is_read !== 1 && item.khf) {
                            this.wdArr.push(item.id);
                        }
                    });
                    // 这里写你要做的事
                    if (this.wdArr.length > 0) {
                        this.edit_read();
                    }
                },
}
相关推荐
月光宝盒造梦师2 小时前
Ant Design Ellipsis 中的判断逻辑 isEleEllipsis 方法非常消耗性能
javascript·react·优化
酉鬼女又兒3 小时前
零基础快速入门前端ES6 核心特性详解:Set 数据结构与对象增强写法(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·javascript·职场和发展·蓝桥杯·es6
慧一居士3 小时前
Vue项目中,子组件调用父组件方法示例,以及如何传值示例,对比使用插槽和不使用插槽区别
前端·vue.js
阿珊和她的猫3 小时前
以用户为中心的前端性能指标解析
前端·javascript·css
SeSs IZED3 小时前
【Nginx 】Nginx 部署前端 vue 项目
前端·vue.js·nginx
叫我一声阿雷吧4 小时前
JS 入门通关手册(36):变量提升、暂时性死区与块级作用域
javascript·变量提升·暂时性死区·tdz·块级作用域· 前端面试
成都渲染101云渲染66664 小时前
跳出“硬件堆砌”陷阱|渲染101如何用技术重构云渲染的专业价值?
java·前端·javascript
SuperEugene4 小时前
Vue3 性能优化规范:日常必做优化(不玄学、可落地)|可维护性与兜底规范篇
开发语言·前端·javascript·vue.js·性能优化·前端框架
cypking4 小时前
二次封装ElementUI日期范围组件:打造带限制规则的Vue2 v-model响应式通用组件
前端·javascript·elementui
A923A4 小时前
【小兔鲜电商前台 | 项目笔记】第二天
前端·vue.js·笔记·项目·小兔鲜