【发布时间】:2018-10-31 04:21:23
【问题描述】:
我正在尝试将 整页滚动 添加到我正在处理的网站中(使用 React,遗憾的是无法获取 fullpage.js、react-fullpage 或任何其他库)与我的项目)。
基本上我想要做的是禁用“正常”滚动(我在所有滚动键上使用 preventDefault() )并自行处理滚动。
这是一个示例代码:
window.addEventListener("wheel", e => {
const delta=e.detail? e.detail*(-120) : e.wheelDelta;
// console.log(delta);
let direction;
if ( delta !== null ) {
direction = delta > 0 ? 'up' : 'down';
}
//console.log(direction);
if(direction === "down"){
document.querySelector('.who').scrollIntoView({ alignToTop: true, behavior: 'smooth'});
}
else if (direction === "up"){
document.querySelector('.why').scrollIntoView({ alignToTop: true, behavior: 'smooth'});
}
});
此代码有效,但是只有在用户停止滚动后才会触发 scrollIntoView(它是新功能并且需要 polyfill,ik)方法。
我记录了我的屏幕以更好地解释问题: https://gifyu.com/image/x6Yx(请耐心等待,2-3 秒后开始出现问题)
正如您在此处看到的,控制台在我向下滚动后立即开始记录增量和方向,但是 .scrollIntoView 仅在 鼠标滚轮停止移动后触发 - 那是网站开始滚动的时候。
这意味着如果我一直向下移动鼠标滚轮 scrollIntoView() 将永远不会运行。
我希望在用户向上或向下移动滚轮后立即进行滚动。有谁知道如何做到这一点?
【问题讨论】:
标签: javascript reactjs scroll mousewheel