问题标签 [getboundingclientrect]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - getBoundingClientRect 不准确
我的目标是在元素出现在视口上之前注入一个元素(取决于惰性数据属性,默认是元素出现在视口上之前的 100px)。我如何做到这一点是通过使用getBoundingClientRect();
我像这样使用它
我发现的一件主要事情是(我将控制台日志$(window).scrollTop()
与控制台日志一起记录在何时TestBox.isOnScreen(element)
:检测到元素在视口上的时刻并不总是准确的。有时是 14px、5px 或正好好。
有没有人遇到过这个问题?还是我执行错了?
javascript - 如何最好地将 ClientRect / DomRect 转换为普通对象
的结果someElement.getBoundingClientRect()
返回一个特殊类型的对象ClientRect
(或DomRect
显然)
它的结构类似于{top: 10, right: 20, bottom: 30, left: 10, width: 10}
不幸的是,这个对象的行为与其他对象不同。
例如,使用Object.keys
它返回一个空数组(我认为因为ClientRect
属性不是枚举
我发现了一种转换为普通对象的肮脏方式:
我的问题是,有没有更好的方法?
javascript - 更改 getBoundingClientRect() 的事件或观察者
有没有办法在getBoundingClientRect()
没有实际计算的情况下检测元素的矩形何时发生变化getBoundingClientRect()
?像“脏旗”之类的东西?天真地,我假设在浏览器的内部工作中一定有这样的机制,但我一直无法找到暴露在 DOM API 中的这个东西。也许有办法用 MutationObservers 做到这一点?
我的应用程序是一个 Web 组件,它将 DOM 元素转换为图形的节点,并将边缘绘制到全屏画布上。见这里。
现在,我正在调用getBoundingClientRect()
每个元素,每个动画帧帧一次,即使没有任何变化。感觉很贵 我通常在一台功能强大的计算机上以 60 fps 的速度获得 %15-%50 的 CPU 使用率。
有谁知道这样的事情?你认为期待这样的事情合理吗?这种事情可行吗?以前有没有提出过?
variables - “menu > li:first-child”作为“getBoundingClientRect().left”的变量
我有以下层次结构:
我试图将这些中的每一个放入一个变量中,以便:
它现在适用于:
但不是:
为了在变量中使用第一个孩子或第 n 个孩子,我需要做什么?
javascript - 如何在转换之前获得元素的矩形?
目前,Element.getBoundingClientRect()
给出了元素的位置和尺寸,但它会通过 CSStransform
属性自动考虑转换。如何在没有转换的情况下获得矩形?
在下面的示例中,我希望输出为10 10 100 100
.
javascript - 获取视口中的元素 id
我在 div 标签内添加了一个 iframe。iframe 内容具有带有特定 ID 的标签“sec”,例如,
iframe 内容使用列宽和列间距水平扩展。Div 可根据 iframe 宽度滚动。
我需要找到的是当前在视口中可见的“sec”标签的第一个和最后一个 id 值。
我发现了 getBoundingClientRect 但不清楚如何使用它?
还有一个问题是它不会增加处理负载,因为我们需要运行一个循环来检查每个标签位置吗?
任何人都可以为它遮光吗?
javascript - Javascript getBoundingClientRect() - 应用于类的多个实例
我一直在尝试使用一个函数来检测一个元素是否在视口中:
不幸的是,这似乎只适用于“特殊”类的第一个实例。如何让它适用于该类的所有实例?
请注意,我添加了 3 秒延迟,以防止快速滚动触发它。
这是我进步的 jsfiddle:http: //jsfiddle.net/azjbrork/6/
javascript - Internet Explorer 11 中的范围 getBoundingClientRect() 顶部不正确
我正在使用 Range 对象和 Element.getBoundingClientRect() 来计算某些文本的位置。我在 Chrome 和 Firefox 中得到了预期的结果,但在 IE 中 top 属性值是错误的。
更具体地说,包含在具有 line-height 值的 span 元素中的文本。这个粗略的小提琴说明了这个问题https://jsfiddle.net/eekr4qhs/
示例 HTML
代码片段
看来IE在计算范围的DOMRect时没有考虑行高属性值
如果我在 Chrome 中打开小提琴,我会得到 249.09722900390625 作为矩形的顶部,而在 IE 11 中,顶部是 8
有没有人见过这个问题,有没有办法让 IE 返回正确的边界客户端矩形?