如何确定jQuery滚动事件的方向?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何确定jQuery滚动事件的方向?相关的知识,希望对你有一定的参考价值。
我正在寻找这样的效果:
$(window).scroll(function(event){
if (/* magic code*/ ){
// upscroll code
} else {
// downscroll code
}
});
有任何想法吗?
检查当前的scrollTop
与之前的scrollTop
var lastScrollTop = 0;
$(window).scroll(function(event){
var st = $(this).scrollTop();
if (st > lastScrollTop){
// downscroll code
} else {
// upscroll code
}
lastScrollTop = st;
});
要忽略页面顶部和底部的任何快照/动量/反弹,这里是Josiah's accepted answer的修改版本:
var prevScrollTop = 0;
$(window).scroll(function(event){
var scrollTop = $(this).scrollTop();
if ( scrollTop < 0 ) {
scrollTop = 0;
}
if ( scrollTop > $('body').height() - $(window).height() ) {
scrollTop = $('body').height() - $(window).height();
}
if (scrollTop >= prevScrollTop && scrollTop) {
// scrolling down
} else {
// scrolling up
}
prevScrollTop = scrollTop;
});
您可以确定鼠标滚轮方向。
$(window).on('mousewheel DOMMouseScroll', function (e) {
var delta = e.originalEvent.wheelDelta ?
e.originalEvent.wheelDelta : -e.originalEvent.detail;
if (delta >= 0) {
console.log('scroll up');
} else {
console.log('scroll down');
}
});
保持简单:
jQuery事件监听器方式:
$(window).on('wheel', function(){
whichDirection(event);
});
Vanilla javascript事件监听器方式:
if(window.addEventListener){
addEventListener('wheel', whichDirection, false);
} else if (window.attachEvent) {
attachEvent('wheel', whichDirection, false);
}
功能保持不变:
function whichDirection(event){
console.log(event + ' WheelEvent has all kinds of good stuff to work with');
var scrollDirection = event.deltaY;
if(scrollDirection === 1){
console.log('meet me at the club, going down', scrollDirection);
} else if(scrollDirection === -1) {
console.log('Going up, on a tuesday', scrollDirection);
}
}
我在它上面写了一篇更深入的帖子here
您可以同时使用滚动和鼠标滚轮选项来跟踪上下移动。
$('body').bind('scroll mousewheel', function(event) {
if (event.originalEvent.wheelDelta >= 0) {
console.log('moving down');
}
else {
console.log('moving up');
}
});
你也可以用(窗口)替换'body'。
使用它来查找滚动方向。这只是为了找到垂直滚动的方向。支持所有跨浏览器。
var scrollableElement = document.getElementById('scrollableElement');
scrollableElement.addEventListener('wheel', findScrollDirectionOtherBrowsers);
function findScrollDirectionOtherBrowsers(event){
var delta;
if (event.wheelDelta){
delta = event.wheelDelta;
}else{
delta = -1 * event.deltaY;
}
if (delta < 0){
console.log("DOWN");
}else if (delta > 0){
console.log("UP");
}
}
此代码适用于IE,Firefox,Opera和Chrome:
$(window).bind('wheel mousewheel', function(event) {
if (event.originalEvent.deltaY >= 0) {
console.log('Scroll up');
}
else {
console.log('Scroll down');
}
});
'wheel mousewheel'和属性deltaY必须在bind()函数中使用。
请记住:出于安全原因,您的用户必须更新其系统和浏览器。在2018年,“我有IE 7”的借口是胡说八道。我们必须教育用户。
祝你有美好的一天 :)
在滚动的元素的.data ()
中存储增量,然后您将能够测试滚动到达顶部的次数。
为什么没人在滚动时使用event
返回的jQuery
对象?
$window.on('scroll', function (event) {
console.group('Scroll');
console.info('Scroll event:', event);
console.info('Position:', this.pageYOffset);
console.info('Direction:', event.originalEvent.dir); // Here is the direction
console.groupEnd();
});
我正在使用chromium
,如果他们有dir
属性,我没有检查其他浏览器。
自从q3xswpoi v3(“被bind
has been deprecated取代”)和on
以来,忘记wheel
is now supported:
wheelDelta
$(window).on('wheel', function(e) {
if (e.originalEvent.deltaY > 0) {
console.log('down');
} else {
console.log('up');
}
if (e.originalEvent.deltaX > 0) {
console.log('right');
} else {
console.log('left');
}
});
在元素的wheel
中,您可以存储JSON并测试值以启动事件
Browser Compatibility on MDN's (2019-03-18)
您可以在不必跟踪上一个滚动顶部的情况下执行此操作,因为所有其他示例都需要:
$(window).bind('mousewheel', function(event) {
if (event.originalEvent.wheelDelta >= 0) {
console.log('Scroll up');
}
else {
console.log('Scroll down');
}
});
我不是这方面的专家所以请随意进一步研究它,但看来当你使用$(element).scroll
时,正在听的事件是一个'滚动'事件。
但是如果您通过使用bind专门侦听mousewheel
事件,则事件参数的originalEvent
属性包含不同的信息。部分信息是wheelDelta
。如果是正面,则向上移动鼠标滚轮。如果是负数,则向下移动鼠标滚轮。
我的猜测是,即使页面不滚动,当鼠标滚轮转动时,mousewheel
事件也会触发;可能不会触发“滚动”事件的情况。如果需要,可以在回调的底部调用event.preventDefault()
以防止页面滚动,这样您就可以将鼠标滚轮事件用于除页面滚动之外的其他内容,例如某种类型的缩放功能。
当用户滚动离开页面顶部时以及当它们返回顶部时,这是简单且容易的检测。
这是用于在用户结束滚动时检测方向的最佳解决方案。
.data()
你应该试试这个
{ top : 1,
first_top_event: function(){ ...},
second_top_event: function(){ ...},
third_top_event: function(){ ...},
scroll_down_event1: function(){ ...},
scroll_down_event2: function(){ ...}
}
我有弹性滚动问题(滚动弹跳,橡皮筋)。如果靠近页面顶部,则忽略向下滚动事件。
$(window).scroll(function() {
if($(window).scrollTop() > 0) {
// User has scrolled
} else {
// User at top of page
}
});
你也可以使用它
var currentScrollTop = 0 ;
$(window).bind('scroll', function () {
scrollTop = $(this).scrollTop();
clearTimeout($.data(this, 'scrollTimer'));
$.data(this, 'scrollTimer', setTimeout(function() {
if(scrollTop > currentScrollTop){
// downscroll code
$('.mfb-component--bl').addClass('mfbHide');以上是关于如何确定jQuery滚动事件的方向?的主要内容,如果未能解决你的问题,请参考以下文章