JavaScript BOM中可用window.scrollTo()或element.scrollIntoView()配合behavior: 'smooth'实现原生平滑滚动;前者适用于已知像素坐标,后者适合定位DOM元素;需注意浏览器兼容性并做降级处理。

JavaScript BOM 中控制页面平滑滚动到指定位置,主要靠 window.scrollTo() 或 element.scrollIntoView() 配合 behavior: 'smooth' 选项实现,无需第三方库,现代浏览器原生支持。
使用 window.scrollTo() 平滑滚动到页面坐标
适用于已知目标位置的像素值(如顶部、某固定偏移量):
- 滚动到页面顶部:
window.scrollTo({ top: 0, behavior: 'smooth' }); - 滚动到距顶部 500px 处:
window.scrollTo({ top: 500, behavior: 'smooth' }); - 同时指定水平和垂直位置:
window.scrollTo({ left: 0, top: 300, behavior: 'smooth' });
使用 element.scrollIntoView() 平滑滚动到元素位置
更常用,适合跳转到页面中某个 DOM 元素(如锚点、标题、表单):
- 让元素完全进入视口顶部:
document.getElementById('section2').scrollIntoView({ behavior: 'smooth', block: 'start' }); - 居中显示该元素:
element.scrollIntoView({ behavior: 'smooth', block: 'center' }); - 兼容旧写法(不推荐):
element.scrollIntoView(true);是非平滑的“瞬间滚动”
配合锚点链接或按钮实现点击滚动
给按钮绑定事件,避免默认跳转行为干扰平滑效果:
立即学习“Java免费学习笔记(深入)”;
- HTML 示例:
<a href="#contact" id="to-contact">联系我</a> - JS 拦截并平滑滚动:
document.getElementById('to-contact').addEventListener('click', function(e) { e.preventDefault(); document.querySelector(this.getAttribute('href')).scrollIntoView({ behavior: 'smooth' }); });
注意兼容性和降级处理
behavior: 'smooth' 在 Chrome 61+、Firefox 36+、Edge 79+、Safari 15.4+ 支持。如需兼容旧版 Safari 或 IE,可检测支持性并回退为普通滚动:
- 检测方式:
'scrollBehavior' in document.documentElement.style - 简单降级:
element.scrollIntoView(behavior === 'smooth' ? { behavior } : false); - 不建议强行用
setTimeout + scrollTop手写动画,易出错且维护成本高


















