每次调用 Element.scrollHeight 和 Element.scrollTop

我已经实现了自己的可滚动布局,并且在其中定义了一些字段来存储Element.scrollHeightElement.scrollTop,Element.scrollWidthElement.scrollLeft避免可能的重复计算(这似乎是技术术语reflow),因为它们在几种自定义生命周期方法中使用。

我想知道这是否是多余的,因为这些属性可能只是定义为 getter 以保护它们不被客户端更改,而 getter 只会从存储实际值的客户端返回不可见字段。


莫回无
浏览 133回答 1
1回答

有只小跳蛙

两者兼而有之。除其他外,这些属性需要布局框是最新的才能返回正确的值,所以是的,它们将触发重排……如果有必要。如果布局是最新的,浏览器不需要重新计算它,也不会触发重排,他们可以只选择上次布局框计算请求的内部值。因此,如果在这些调用之间没有任何改变布局,那么多次调用这些不是问题。但是,如果某些东西确实改变了两者之间的布局(如类更改、DOM 节点插入等),则每次调用都可能花费很多,因此请谨慎调用。Ps:关于 getter 的事情,它根本不是要阻止用户设置这些,因为你实际上可以设置这些:console.log( div.offsetWidth );Object.defineProperty( div, "offsetWidth", { value: 0 } );console.log( div.offsetWidth );<div id="div">hello</div>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript