- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试向我正在处理的网站添加整页滚动(使用 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() 将永远不会运行。
我希望在用户向上或向下移动滚轮后立即发生滚动。有谁知道如何做到这一点?
最佳答案
似乎连续触发 .scrollIntoView()
并设置 behaviour: 'smooth'
参数取消了动画,因为这个函数只被调用一次.
在您的代码中,您试图平滑地滚动到该方向,但是通过不断触发滚轮事件并因此不断调用 .scrollIntoView()
函数,动画被取消,直到动画可以播放而没有被打断。
这也是为什么在你停止滚动后动画发生的原因。
解决这个问题的方法是只要滚动动画还在继续,就阻止对 .scrollIntoView()
的任何其他调用。我找到了 this question关于如何知道滚动何时完成。
为什么您尝试添加整页滚动的 React 库失败了?
关于javascript - onWheel 事件 - 如何立即触发方法,而不是在用户停止滚动后触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50450054/
当我将鼠标悬停在 DIV 上时,我想禁用窗口滚轮滚动并启用紫色方形滚轮滚动。它在 Chrome 和 IE11 中运行良好,但在 Firefox 中不起作用。 火狐浏览器 window.onwheel
虽然这是一个基本问题,但我一直找不到答案。但是,由于这是一个基本问题,因此无法提供太多解释。不幸的是,我没有可以用来测试这个的笔记本电脑。 ele.onwheel = function(e) { }
我正在使用 jQuery mousewheel 监听器来检测滚动事件。有一个阈值,我让代码触发一次代码,但是当用户快速滚动时它不起作用。 我的 JavaScript 代码 var prevPositi
我正在尝试覆盖组件上的 Ctrl+滚动行为,但它无法处理错误 [Intervention] Unable to preventDefault inside passive event listener
我正在尝试向我正在处理的网站添加整页滚动(使用 React,遗憾的是无法让 fullpage.js、react-fullpage 或任何其他库正常工作与我的项目)。 基本上,我要做的是禁用“正常”滚动
当我尝试更改默认的滚动条属性时,我发现重写scroll() 或onscroll 事件的回调函数并不方便,相反,我应该为“onwheel”事件重写一个回调函数。 那么 onwheel 和 onscrol
TL;DR: 查看我的 jsfiddle 链接,其中向上滚动子 div 直到底部/顶部不应开始滚动父级。我尝试使用 e.stopPropagation()这没有用。所以需要解决方案(不使用 mixin
const Index = () => { // Ref Links const frefLinks = { 1: useRef(1), 2: useRef(2), 3: useRef(3
我有一个组件,我在其中使用 onWheel 事件来检测所有方向的滚动(这有效)。我的问题是阻止此组件重新呈现,因此我可以利用 underscore.js 中的 throttle : 例子 import
我是一名优秀的程序员,十分优秀!