是否可以将多个事件的侦听器设置为一起触发?

时间:2017-06-01 19:53:34

标签: javascript jquery html

我试图仅在两个事件从同一个动作触发(即scrollmousewheel)时才触发处理程序。

我的第一次尝试是:

 $('#right-nav').on('scroll mousewheel', function(event){ console.log('Fired') })

但是,这里可以在没有scroll的情况下触发mousewheel,在没有mousewheel的情况下触发scroll。此外,如果同时触发两者,该函数将执行两次。

我只有在mousewheel也触发scroll时才执行,简单来说就是为了捕捉“产生两个事件的单一动作”

,反之亦然,仅在mousewheel未触发scroll

时执行

这可能吗?无论如何要告诉其他事件是否会来临?

这是一个游乐场jsFiddle: https://jsfiddle.net/o2gxgz9r/8028/

2 个答案:

答案 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);
  }
});