news 2026/3/8 17:49:37

dom 相关api getBoundingClientRect

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
dom 相关api getBoundingClientRect

getBoundingClientRect()是 JavaScript 中一个非常重要的DOM API,用于获取元素在视口(viewport)中的位置和尺寸信息

const rect = element.getBoundingClientRect();

返回一个DOMRect对象,包含以下只读属性(单位:像素):

属性含义
x/left元素左边缘到视口左侧的距离
y/top元素上边缘到视口顶部的距离
right元素右边缘到视口左侧的距离
bottom元素下边缘到视口顶部的距离
width元素宽度(等价于right - left
height元素高度(等价于bottom - top

💡 注意:xleft是等价的,ytop也是等价的(现代浏览器支持x/y)。

🖼️ 图示说明

视口顶部 │ │ top (y) │ ↓ ├───────────────┐ ← left (x) │ │ │ 元素 │ → right │ │ └───────────────┘ │ │ bottom ↓ 视口底部

假设你有一个很长的网页,其中有一个按钮:

<!-- 页面顶部 --> <h1>欢迎来到我的网站</h1> <!-- 中间有很多内容(比如 2000px 高的空白) --> <div style="height: 2000px; background: #eee;"></div> <!-- 目标按钮:距离页面顶部 2100px --> <button id="myBtn">点击我</button>
  • 按钮在整个页面中的绝对位置是:top = 2100px(从页面最顶端算起)
  • 浏览器窗口高度是:800px

情况一:页面没有滚动(刚打开时)

  • 你看到的是页面顶部(<h1>
  • 按钮在屏幕下方很远,甚至看不见
  • 此时调用:
const btn = document.getElementById('myBtn'); console.log(btn.getBoundingClientRect().top); // 输出:2100

✅ 因为视口顶部就是页面顶部,所以top = 2100(按钮在视口下方 2100px)

情况二:你向下滚动了 1500px

  • 现在你看到的是页面中间部分
  • 按钮离你更近了,可能已经出现在屏幕中
  • 此时再调用:
console.log(btn.getBoundingClientRect().top); // 输出:600

❓ 为什么变成600

因为:

  • 按钮在页面中的绝对位置还是2100px
  • 但你已经向下滚动了 1500px,所以视口的“顶部”现在对应的是页面的1500px
  • 所以按钮到当前视口顶部的距离 =2100 - 1500 = 600px

getBoundingClientRect().top始终告诉你:“这个元素现在离你眼前屏幕顶部有多远”

关键结论

  • getBoundingClientRect()的坐标系原点是当前可见屏幕的左上角(视口),不是整个网页的左上角。
  • 自动排除了滚动的影响,直接告诉你“元素现在在屏幕什么位置”。
  • 如果你想得到在整个页面中的绝对位置,需要手动加上滚动偏移:

js

编辑

const rect = el.getBoundingClientRect(); const absoluteTop = rect.top + window.scrollY; const absoluteLeft = rect.left + window.scrollX;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/7 15:05:23

微算法科技(NASDAQ MLGO)链下与机器学习融合:革新区块链可扩展性

区块链技术自诞生以来&#xff0c;凭借去中心化、不可篡改的特性&#xff0c;在金融、供应链、版权保护等领域展现出颠覆性潜力。然而&#xff0c;随着用户规模与交易量的指数级增长&#xff0c;传统区块链架构逐渐暴露出可扩展性不足的瓶颈。公链网络每秒处理几十笔交易的能力…

作者头像 李华
网站建设 2026/3/5 4:06:06

考虑风光出力的虚拟电厂和运营商的主从博弈,分别考虑电动汽车充放电,火电出力,储能设备充放电充放...

考虑风光出力的虚拟电厂和运营商的主从博弈&#xff0c;分别考虑电动汽车充放电&#xff0c;火电出力&#xff0c;储能设备充放电充放电价格等因素外层用改进粒子群算法&#xff0c;目标函数线性加权。最近在折腾虚拟电厂和运营商的主从博弈模型&#xff0c;发现把风光出力、电…

作者头像 李华
网站建设 2026/3/6 11:45:37

不囤货、不开店,如何用一部手机连接1000家品牌

凌晨四点,陈明被一通电话吵醒。电话那头是仓库老王急促的声音:“陈总,那批饼干还有三天过期,今天再处理不掉,就只能当垃圾扔了!” 这已经是这个月第三次了。陈明烦躁地挂掉电话,看着仓库里堆积如山的临期货,心里像压了块石头。他是华南地区某知名饼干品牌的代理商,手里…

作者头像 李华
网站建设 2026/3/5 10:54:45

vue基于Springboot框架二手车托运物流管理系统

目录已开发项目效果实现截图开发技术系统开发工具&#xff1a;核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&…

作者头像 李华
网站建设 2026/3/5 4:06:09

《Etsy 最狠的地方,不是封号,而是先让你注册成功》

如果你是第一次做 Etsy 买家账号&#xff0c;我可以先告诉你一个不太好听的事实&#xff1a; 你现在网上看到的注册教程&#xff0c;基本都已经失效了。 什么换个 IP 开无痕 一个邮箱一个号 这些在 Etsy 现在的风控体系里&#xff0c;几乎等于“裸奔注册”。一、新手最容易掉进…

作者头像 李华
网站建设 2026/3/5 3:00:56

IoTDB详解

IoTDB 全称为 Internet of Things Database&#xff0c;是一款由清华大学团队主导开发的开源时序数据库&#xff0c;专门为物联网&#xff08;IoT&#xff09;场景量身打造。简单来说&#xff0c;它就是为海量、高频的物联网设备数据 “量身定做的存储与管理管家”。一、核心定…

作者头像 李华