如何确定滚动方向而不实际滚动
我正在编写一个页面,用户第一次滚动时,它实际上不会向下滚动页面,而是添加一个带有转换的类。 我想检测用户何时向下滚动,因为如果他向上滚动,我希望它做其他事情。 我发现的所有方法都是基于定义当前正文ScrollTop,然后在页面滚动后与body scrollTop进行比较,定义方向,但由于页面实际上没有滚动,因此bodyTop()不会改变。
animationIsDone = false; function preventScroll(e) { e.preventDefault(); e.stopPropagation(); } $('body').on('mousewheel', function(e) { if (animationIsDone === false) { $("#main-header").removeClass("yellow-overlay").addClass("yellow-overlay-darker"); $(".site-info").first().addClass("is-description-visible"); preventScroll(e); setTimeout(function() { animationIsDone = true; }, 1000); } });
这就是我所拥有的,但是这样我滚动它的方向无关紧要触发事件
mousewheel
事件很快就会过时。 你应该用wheel
代替。
这也可以轻松实现垂直和/或水平滚动方向,无需滚动条。
此活动在所有当前主流浏览器中都得到了支持,并且应该是未来的标准。
这是一个演示:
window.addEventListener('wheel', function(e) { if (e.deltaY < 0) { console.log('scrolling up'); document.getElementById('status').innerHTML = 'scrolling up'; } if (e.deltaY > 0) { console.log('scrolling down'); document.getElementById('status').innerHTML = 'scrolling down'; } });
使用addEventListener
尝试此操作。
window.addEventListener('mousewheel', function(e){ wDelta = e.wheelDelta < 0 ? 'down' : 'up'; console.log(wDelta); });
演示
更新:
如其中一个答案中所述, mousewheel事件已折旧。 您应该使用wheel事件。
尝试使用e.wheelDelta
var animationIsDone = false, scrollDirection = 0; function preventScroll(e) { e.preventDefault(); e.stopPropagation(); } $('body').on('mousewheel', function(e) { if (e.wheelDelta >= 0) { console.log('Scroll up'); //your scroll data here } else { console.log('Scroll down'); //your scroll data here } if (animationIsDone === false) { $("#main-header").removeClass("yellow-overlay").addClass("yellow-overlay-darker"); $(".site-info").first().addClass("is-description-visible"); preventScroll(e); setTimeout(function() { animationIsDone = true; }, 1000); } });
注意:请记住,不推荐使用MouseWheel,FireFox不支持
测试铬和
$('body').on('mousewheel', function(e) { if (e.originalEvent.deltaY >= 0) { console.log('Scroll up'); //your scroll data here } else { console.log('Scroll down'); //your scroll data here } });