方案 1:纯 CSS Scroll Snap

原理:利用 CSS 的 scroll-snap 属性实现无 JS 吸附滚动优点:零依赖、性能最佳、代码简洁

问题:鼠标连续滚动时体验不佳,scroll-snap的机制是在滚动操作结束后才会触发吸附,快速连续滚动时,由于滚动并未真正"结束",可能导致吸附行为不能及时生效

html, body { margin: 0; height: 100%; } .scroll-container { height: 100vh; overflow-y: scroll; scroll-snap-type: y mandatory; /* 关键属性 */ } .page { height: 100vh; scroll-snap-align: start; /* 吸附点 */ display: flex; justify-content: center; align-items: center; font-size: 3rem; } .page:nth-child(1) { background: #FF6B6B; } .page:nth-child(2) { background: #4ECDC4; } .page:nth-child(3) { background: #45B7D1; }

Page 1 Page 2 Page 3 方案 2:使用现成库(快速开发)推荐库:

  • fullPage.js(功能最全)
  • Swiper(移动端友好)(把每一页当成一个幻灯片)
  • Scrollify(轻量级)

示例(fullPage.js):

第一屏 第二屏 第三屏

new fullpage('#fullpage', { licenseKey: 'OPEN-SOURCE-GPLV3-LICENSE' }); 方案 3:JavaScript + CSS 动画原理:监听滚动事件,用 transform 动画移动页面 优点:兼容性更好,可控制动画曲线 缺点:需要手动处理滚动逻辑