移动端的Smooth Scroll为什么失效了?
大家好,我在给网页加平滑滚动效果时遇到个怪问题。用了scroll-behavior: smooth后,桌面端点击锚点都能平滑滚动,但手机测试直接跳转。我查了CSS优先级没问题,还试过用JavaScript写window.scrollTo(),移动端还是没效果,这是为啥啊?
代码是这样的:
html {
scroll-behavior: smooth;
}
大家好,我在给网页加平滑滚动效果时遇到个怪问题。用了scroll-behavior: smooth后,桌面端点击锚点都能平滑滚动,但手机测试直接跳转。我查了CSS优先级没问题,还试过用JavaScript写window.scrollTo(),移动端还是没效果,这是为啥啊?
代码是这样的:
html {
scroll-behavior: smooth;
}
scroll-behavior: smooth的支持不完整,尤其是 iOS Safari 从 15 才开始支持,而很多用户还在用旧版本;Android 部分浏览器(比如国产定制版 Chrome)也存在兼容性问题。先确认下你的测试设备系统版本:iOS 15 以下、Android 9 以下大概率不支持 CSS 的 smooth 滚动。
如果必须兼容老设备,建议直接用 JS 实现,但注意别写成:
这玩意在部分旧 Android 浏览器里也会直接跳,得加个 polyfill 或者自己写个简易的缓动函数,比如:
然后点击锚点时阻止默认行为,手动调用这个函数滚动到目标元素的 offsetTop。
顺带一提,如果用的是
<a href="#id">这种原生锚点,记得在 click 事件里event.preventDefault(),不然浏览器会先跳一下,再被 JS 拉回来,体验更怪。移动端兼容这玩意真的头疼,能接受的话直接上 polyfill 也行,比如 smoothscroll-polyfill,但记得在 JS 入口处加个 feature detect:
不然加载了也白搭。