在 react 中无法直接修改浏览器原生滚轮步长,但可通过监听 `wheel` 事件、阻止默认行为并手动控制 `scrolltop`,实现设备无关的整屏/自定义步长滚动效果。
要让 React 应用响应鼠标滚轮时以「整屏高度」为单位滚动(即每次滚轮触发,页面垂直位移恰好为 window.innerHeight),核心思路是:拦截原生滚动行为,统一映射 deltaY 到预设步长,并平滑或精确应用到容器滚动位置。
import React, { useRef, useEffect } from 'react';
const FullPageScroll = () => {
const containerRef = useRef(null);
useEffect(() => {
const container = containerRef.current;
if (!container) return;
const handleWheel = (e: WheelEvent) => {
e.preventDefault(); // 关键:禁用原生滚动
// 统一归一化滚动方向与量级(兼容 macOS trackpad、Windows 鼠标、触控板惯性)
const delta = e.deltaY > 0 ? 1 : -1; // 方向标准化:+1 向下,-1 向上
const step = window.innerHeight * 0.9; // 可微调,如 0.9 避免边界跳变
container.scrollTo({
top: container.scrollTop + delta * step,
behavior: 'smooth', // 或 'auto' 实现瞬时整屏跳转
});
};
container.addEventListener('wheel', handleWheel, { passive: false });
return () => con
tainer.removeEventListener('wheel', handleWheel);
}, []);
return (
{/* 你的页面内容,确保总高度 > 100vh */}
Section 1
Section 2
Section 3
);
};
export default FullPageScroll; 无需依赖用户设备的原始滚轮灵敏度,React 中实现可控滚动步长的本质是:接管 wheel 事件 → 标准化方向 → 应用固定逻辑步长 → 手动驱动滚动。该方案轻量、跨浏览器、易维护,是构建全屏滚动型落地页、产品介绍页或演示站点的理想基础。