javascript - 在什么时候计算 scrollHeight
问题描述
我正在尝试使用我正在使用 Angular 7 开发的手风琴元素进行 css 转换,以便在底部扩展时。由于我自己不会使用该元素,因此我使用overflow-y: visible;
它来确保放置在其中的任何内容都能正确显示。
这意味着由于使用溢出,我引用max-height
而不是height
我的转换。我已经看到它建议使用这种带有溢出的过渡,我应该将其设置max-height
为远远超过它所需要的。
这很好,除了过渡将始终使用该值并且动画可能看起来很愚蠢,具体取决于其内容。为了解决这个问题,我想我可以等待元素被实例化,填充其内容,抓取它scrollHeight
,然后将其设置为max-height
.
setTimeout
我可以用used within做(并且确实有效),ngAfterViewInit()
但scrollHeight
直到大约 70 毫秒后才计算和定义(根据一些超时测试),但textContent
立即存在。
这让我开始思考,是否有某个时间点scrollHeight
被计算出来,有没有办法挂钩那个事件或任何东西?我不想依赖一个奇怪的任意时间值setTimeout()
。
只是一个概念问题,不认为你需要任何代码或任何东西?多谢你们
解决方案
应用于 DOM 元素的更改不会立即应用,在单个执行周期中对 DOM 所做的所有更改都会收集并在一次重绘中应用。
因此,在尝试读取元素的更新尺寸之前,您需要等待重绘完成。
requestAnimationFrame
是在每次重绘之前执行的方法,如果您这样编写代码
element.style.display = 'block';
requestAnimationFrame(() => console.log(element.scrollHeight));
回调将在下一次重绘之前执行,您应该获得更新后的滚动高度。
推荐阅读
- c++ - 字符数组在井字游戏中的重要性
- python - 如何获取我在 OCC 小部件上单击的顶点?
- json - Angular 应用程序未检测到来自 json 文件的修改
- javascript - 如果最小化浏览器或切换选项卡,MediaRecorder 不会录制
- javascript - 如何在 CSS 中的旋转元素上使用动画
- ios - (iOS / Swift) 键值对的简单发布请求失败,但使用 Postman 成功
- c# - 如何在 C# 中使用异步?
- javascript - 地图函数中特定项目的 onClick 函数
- c - 如何以非标准方式在 C 中键入定义结构
- c# - Powershell 中的 pyasn decoder.decode 的等价物