我试图仅在两个事件从同一个动作触发(即scroll
和mousewheel
)时才触发处理程序。
我的第一次尝试是:
$('#right-nav').on('scroll mousewheel', function(event){ console.log('Fired') })
但是,这里可以在没有scroll
的情况下触发mousewheel
,在没有mousewheel
的情况下触发scroll
。此外,如果同时触发两者,该函数将执行两次。
我只有在mousewheel
也触发scroll
时才执行,简单来说就是为了捕捉“产生两个事件的单一动作”
,反之亦然,仅在mousewheel
未触发scroll
这可能吗?无论如何要告诉其他事件是否会来临?
这是一个游乐场jsFiddle: https://jsfiddle.net/o2gxgz9r/8028/
答案 0 :(得分:1)
无法一次触发两个(或更多)事件。 但是如果它们可能是相关的,你总是可以想到事件的顺序等。 请记住,JavaScript是一个单独的线程,例如 假设滚动事件应在mousewheel事件之前或之后但在100ms内我会这样做:
var eventHappened = false ;
$(something).on('scroll', function(){
if (eventHappened){
// do the task I need for both events
}
else{
eventHappened = true ;
window.setTimeout(function(){ eventHappened = false ; }, 100);
}
});
$(something).on('mousewheel', function(){
if (eventHappened){
// do the task I need for both events
}
else{
eventHappened = true ;
window.setTimeout(function(){ eventHappened = false ; }, 100);
}
});
答案 1 :(得分:0)
扩展@ neojg的答案:
var scroll = false, mouse = false;
$(something).on('scroll', function(){
if (mouse){
// do the task I need for both events
}
else{
scroll = true ;
window.setTimeout(function(){ scroll = false ; }, 100);
}
});
$(something).on('mousewheel', function(){
if (scroll){
// do the task I need for both events
}
else{
mouse = true ;
window.setTimeout(function(){ mouse = false ; }, 100);
}
});