在 BrowserStack 中进行测试后,我得出结论,自 81 版以来,使用scrollTo()
with option 参数behavior: smooth
在 Chrome 和 Edge 中不起作用。Edge 和 Chrome 的 80 版都按预期工作。根据MDN,它应该没有星号。(与 Safari 不同)
在诸如this one之类的流行答案中,建议使用 usingbehavior: smooth
来在您的 Web 应用程序中启用平滑滚动。
这是一个小的可重复性:
<html>
<button onclick="goToAnchor('b')">Scroll to B</button>
<div id="a" style="height: 1000px; background-color: blue;">Blue</div>
<div id="b" style="height: 1000px; background-color: red;">Red</div>
<div id="c" style="height: 1000px; background-color: green;">Green</div>
</html>
<script>
function goToAnchor(anchor) {
let rect = document.getElementById(anchor).getBoundingClientRect();
window.scrollTo({
left: rect.left + window.pageXOffset,
top: rect.top + window.pageYOffset,
behavior: 'smooth',
});
}
</script>
预期的行为是浏览器窗口将视图平滑地插入到红色 div。它在我测试过的所有版本的 Firefox 中都能正确执行此操作。在自 v81 以来的所有 Chrome 版本以及自 v81 以来的所有 Edge 版本中,它似乎都使用了behavior: auto
- 即它跳转到 div 而不是平滑地插入视图的行为。
在 Edge 和 Chrome 的 80 版本中,它的行为就像 Firefox,这意味着这个错误(?)一定是在 81 版本中引入的——也许是在共享的 Chromium 代码库中?
我发现我不太可能是第一个发现这个问题的人,因为它自 4 月以来一直没有工作,因此必须得出结论我做错了什么。有人可以指出代码中的错误吗?还是 Chrome 和 Edge API 真的坏了?行为是否隐藏在功能标志后面,就像在 Safari 中一样?