Element.getBoundingClientRect返回元素的大小及其相对视口的位置

news/2025/1/24 17:59:06/

Element.getBoundingClientRect()返回元素的大小及其相对视口的位置

在工作的项目中使用的递归的方式获取当前元素的父元素的offsetTop(为只读属性,它返回当前元素相对于其 offsetParent 元素的顶部内边距的距离。)进行累加所得到当前元素相对于视口的高度。
偶然发现js有个原生方法就是获取当前元素相对于相对于视口的位置即Element.getBoundingClientRect()

标准盒子模型,元素的尺寸等于width/height + padding + border-width的总和。
box-sizing: border-box,元素的的尺寸等于 width/height。

返回值DOMRect

一个DOMRect对象,该对象由该元素的getClientRects()方法返回的一组矩形的集合。即与该元素相关的css边框集合。

DOMRect对象是包含了整个元素的最小矩形(width和height包括padding和border-width)

有一组用于描述整个矩形的位置和大小的只读属性:left,top,right,bottom,x,y,width,height,单位为像素px。除了width和height外的属性都是相对于视口的左上角位置计算的

该对象由该元素的getClientRects()方法返回的一组矩形的集合,即该元素的css边框大小。

如果需要获得边界矩形相对于整个网页左上角的位置,可以通过window.scrollX和window.scrollY获得当前的滚动位置,将当前滚动位置添加到top和left属性上。获得的边界矩形与当前的滚动位置无关。

当计算边界矩形时,会考虑视口区域(或其他可滚动元素)内的滚动操作,即当滚动位置发送变化,top和left值会随之改变。所以,他们的值是相对于视口,不是绝对的

视口:浏览器可见区域
pc端:视口可以调整
移动端:视口固定
在这里插入图片描述

应用场景

图片懒加载
教程:Nirvana-zsy/图片懒加载Demo
github源码:Nirvana-zsy/lazyLoad

offset

在这里插入图片描述

滚动尺寸scroll

注意:获取页面向上滚动的距离,有浏览器兼容性问题。
获取方法:

document.documentElement.scrollTop || document.body.scrollTop

在这里插入图片描述

client

在这里插入图片描述
具体可看
https://developer.mozilla.org/zh-CN/docs/Web/API/Element/getBoundingClientRect


http://www.ppmy.cn/news/36356.html

相关文章

一四二、Visual Studio Code使用

一、快捷键 鼠标hover代码中变量、函数、类名等符号,可以看到符号定义Cmdhover:显示符号定义与代码上下文右键:可以看到跳转菜单Cmd点击:快速跳转至符号定义Ctrl(减号):回到光标上一个停留的位…

使用Python的最佳实践

为什么说最好使用 enumerate() 而不是 range(len()) 来执行迭代 在 Python 中,enumerate() 函数可以在迭代一个序列的同时,返回每个元素的索引值和元素值,这种方法比使用 range(len()) 更加简单易懂。 使用 range(len()) 进行迭代时&#xf…

【零刻】EQ12安装PVE虚拟机教程

PVE虚拟机简介 Proxmox VE是一个运行虚拟机和容器的平台。基于Debian Linux,完全开源。为了获得最大的灵活性,实现了两种虚拟化技术——基于内核的虚拟机(KVM)和基于容器的虚拟化(LXC)。一个主要的设计目标是使管理尽可能容易。运行在单个节点上使用Prox…

【机器学习】逻辑回归(非常详细)

逻辑回归是一个非常经典的算法,其中也包含了非常多的细节,曾看到一句话:如果面试官问你熟悉哪个机器学习模型,可以说 SVM,但千万别说 LR,因为细节真的太多了。 秉持着精益求精的工匠精神不断对笔记进行修改…

「ChatGPT」十分钟学会如何在本地调用API_KEY(最新版 | 附源码)

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后…

Docker使用DockerFile部署Go项目

Docker使用DockerFile部署Go项目1. 文章说明2. Go项目打包到Linux2.1 学习链接与知识点2.2. 打包生成 main 文件2.3 Docker部署Go项目1. 文章说明 目的:将打包生成的 main 文件,在Docker里面,使用Dockerfile文件,生成镜像与容器&…

【VScode】远程连接Linux

目录标题1. 安装扩展插件2. 在Linux上操作3. 确定Linux的IP地址4. 远程连接到Linux5. 实现免密码登录使用 VScode 远程编程与调试的时有会用到插件 Remote Development,使用这个插件可以在很多情况下代替 vim 直接远程修改与调试服务器上的代码,同时具备…

作为一个女测试员是什么样的体验?

面试时极度紧张,语无伦次,觉得肯定没戏,最后却拿到高薪offer。 工作之后我听同事们讲,测试总监面试官并没打算要我,但身边的人都问他: 那个小姐姐什么时候来报道?... 于是在众人的期待的目光…