getBoundingClientRect 判断 DOM 元素是否在视窗中 📅 发布时间:2026/7/5 6:53:31 👁️ 浏览次数: 文章目录前言一、基本实现方法二、更宽松的判断方式三、带有阈值的判断四、性能优化建议前言getBoundingClientRect()是一个常用的 DOM API它可以获取元素相对于视口(viewport)的位置和尺寸信息。通过这个方法我们可以判断一个元素是否出现在当前视窗中。一、基本实现方法functionisElementInViewport(el){const rectel.getBoundingClientRect();return(rect.top0rect.left0rect.bottom(window.innerHeight||document.documentElement.clientHeight)rect.right(window.innerWidth||document.documentElement.clientWidth));}二、更宽松的判断方式有时候我们可能希望元素部分出现在视窗中就视为可见functionisElementPartiallyInViewport(el){const rectel.getBoundingClientRect();return(rect.top(window.innerHeight||document.documentElement.clientHeight)rect.bottom0rect.left(window.innerWidth||document.documentElement.clientWidth)rect.right0);}三、带有阈值的判断可以添加阈值当元素进入视窗一定比例时才视为可见functionisElementInViewport(el, threshold0){const rectel.getBoundingClientRect();const viewportHeightwindow.innerHeight||document.documentElement.clientHeight;const viewportWidthwindow.innerWidth||document.documentElement.clientWidth;// 计算可见比例 const visibleHeightMath.min(rect.bottom, viewportHeight)- Math.max(rect.top,0);const visibleWidthMath.min(rect.right, viewportWidth)- Math.max(rect.left,0);const visibleAreavisibleHeight * visibleWidth;const elementArearect.height * rect.width;return(visibleArea / elementArea)threshold;}四、性能优化建议1.使用节流(throttle)如果监听 scroll 事件应该使用节流来减少触发频率2.Intersection Observer API对于现代浏览器可以考虑使用更高效的 Intersection Observer API// 使用 Intersection Observer 的示例 const observernew IntersectionObserver((entries){ entries.forEach(entry{ if(entry.isIntersecting){ entry.target.classList.add(animate);observer.unobserve(entry.target);} });});observer.observe(document.querySelector(.animate-me));getBoundingClientRect()方法提供了精确的几何信息但要注意频繁调用可能会影响性能特别是在滚动事件中。对于复杂的可见性检测需求Intersection Observer API 通常是更好的选择。
毕业设计-基于Android的安徽省旅游景点系统应用设计与实现(源码+论文+讲解视频, Android studio+服务端后台+mysql数据库) 安卓Android Studio旅游景点app源码带java web前端后台JSP与Servlet mybatis框架数据库mysql,非常适合学习使用。150分钟代码讲解视频包含项目报告,接近12000字数文档(绪论、开发环境及相关技术简介、可行性分析、项目需求分析、数据库设计、… 2026/5/17 8:54:10
并发编程- 一、简述 线程:线程是cpu可执行的最小单位,而进程是操作系统可分配的最小资源单位。一个进程中可以有多个线程。 线程的五个状态: 新建(new Thread()) 就绪 (thread.start()) 运行(… 2026/5/17 8:54:09
老笔记本安装win11,驱动安装(主要是声卡驱动) 我的笔记本是光影精灵2Pro,CPU是I5-7300HQ。安装win11后爽歪歪。 也解决了黑屏,键盘鼠标无法唤醒,必须开机键唤醒问题,参见9.10和9.11 一,安装最新BIOS 升级win11前,更新最新BIOS,以后就不动… 2026/5/17 8:54:08
免费开源AMD Ryzen调试神器:3分钟上手SMUDebugTool硬件掌控完全指南 免费开源AMD Ryzen调试神器:3分钟上手SMUDebugTool硬件掌控完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址… 2026/7/5 6:51:58
静音直流电机控制方案:TB9051FTG与PIC18LF46K42应用 1. 项目概述:静音直流电机控制方案在工业自动化和消费电子领域,直流电机的噪声问题一直是工程师面临的挑战。传统PWM控制方式虽然简单高效,但开关噪声和电磁干扰(EMI)问题严重影响设备的使用体验。本项目采用东芝TB9051FTG电机驱动IC与Microc… 2026/7/5 6:51:58
【2027最新】基于SpringBoot+Vue的智慧党建系统管理系统源码+MyBatis+MySQL 博主介绍:👨🎓博主简介 ❤计算机在读硕士 | CSDN 专业博客 | Java 技术布道者 ❤深耕实验室一线,痴迷 Spring Boot 与前后端分离架构,累计原创技术博文 200 篇; ❤手把手指导毕业设计 1000 项,… 2026/7/5 6:49:57
IS31FL3731 LED驱动与R7FA6M3AH3CFC MCU开发指南 1. IS31FL3731 LED驱动芯片深度解析IS31FL3731是一款由Lumissil Microsystems公司推出的高性能LED驱动芯片,专为控制144个单色LED而设计。这款芯片通过I2C接口进行编程控制,具有两个独立的控制区块,每个区块可独立管理72个LED。其核心特性包括… 2026/7/5 6:49:57
代驾系统搭建完整方案:订单调度与司机匹配机制解析 在城市夜生活越来越丰富的今天,代驾已经不只是“喝酒后找人开车”这么简单,它逐渐演变成一种高频、即时、强时效的本地服务。无论是商务应酬后的返程,还是临时需要把车安全送回家,用户最在意的往往只有三件事:能不能快… 2026/7/5 6:49:57
MiGPT终极指南:三分钟让小爱音箱变身智能AI助手 MiGPT终极指南:三分钟让小爱音箱变身智能AI助手 【免费下载链接】mi-gpt 🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 还在为小爱音箱的"人工智障&quo… 2026/7/5 6:43:55
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36