【发布时间】:2021-08-29 05:10:19
【问题描述】:
在收到消息(WebSocket,不重要)后,我正在尝试使用 vanilla JS 滚动到 div 的底部(在我的可滚动网页内)。该消息在div 中添加了一个新元素el,我希望div 滚动到el:
div.append(el); // or ...array
// clear div if too many messages here,
// using while (childNodes.length > ...) firstChild.remove();
div.scroll...(el);
- 使用
div.scrollTo(0, div.scrollHeight)(编辑:或div.scrollTop = div.scrollHeight)会很好,如果它不是那么慢的话 - 我经常收到很多消息,而且每当我必须用@强制重排时它基本上会冻结浏览器987654329@. - 使用
el.scrollIntoView()(编辑:或其变体)实际上要快得多(从简短的未受过教育的分析会话中累积,scrollTo的 20 秒和scrollIntoView的 0.6 秒,给定相对相同的负载),但是,我的 @987654333 @ 恰好位于可滚动页面内,scrollIntoView使整个页面滚动以使el出现在视图中。基本上,我希望它滚动到div的底部,甚至在屏幕外(或达到类似的效果)。
对于这个问题还有其他解决方案吗,或者是否可以修复前两个变体之一?
更新:
- 使用
div.scrollTo(0, Number.MAX_SAFE_INTEGER);和类似功能仅适用于 Chrome,不适用于 Firefox。虽然运行速度很快(与第二个解决方案相比)。类似的变体div.scrollTop = Number.MAX_SAFE_INTEGER实际上由于某种原因表现很差。
【问题讨论】:
标签: javascript html performance dom