Javascript 是否可以在一起触发的多个事件上设置侦听器?

Javascript 是否可以在一起触发的多个事件上设置侦听器?,javascript,jquery,html,Javascript,Jquery,Html,只有在同一个动作触发两个事件(即滚动和鼠标滚轮)时,我才尝试触发处理程序 我的第一次尝试是: $('#right-nav').on('scroll mousewheel', function(event){ console.log('Fired') }) 但是,在这里可以触发滚动而不使用鼠标滚轮,也可以触发鼠标滚轮而不使用滚动。此外,如果同时触发这两个,函数将执行两次 我只想在鼠标滚轮也触发滚动时执行,简单地说,就是捕捉“产生两个事件的单个动作” 反之亦然,仅当鼠标滚轮未触发滚动 这可能吗?

只有在同一个动作触发两个事件(即
滚动
鼠标滚轮
)时,我才尝试触发处理程序

我的第一次尝试是:

 $('#right-nav').on('scroll mousewheel', function(event){ console.log('Fired') })
但是,在这里可以触发
滚动
而不使用
鼠标滚轮
,也可以触发
鼠标滚轮
而不使用
滚动
。此外,如果同时触发这两个,函数将执行两次

我只想在
鼠标滚轮
也触发
滚动
时执行,简单地说,就是捕捉“产生两个事件的单个动作”

反之亦然,仅当
鼠标滚轮
未触发
滚动

这可能吗?是否还有其他事件要发生

这里是一个游乐场:
无法同时触发两个(或多个)事件。 但是你总是会想到事件的顺序,如果它们可能是相关的等等。 记住JavaScript是一个单线程,例如。 假设滚动事件应在鼠标滚轮事件之前或之后,但在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);
  }
});

扩展@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);
  }
});

看一看,这可能就是你想要的。这很好,但它不受任何现代浏览器的支持。这不起作用,因为有两个单独的卷轴(例如箭头键)将触发scroll中的EventOccessed事件。这只是一个想法,可以根据具体需要进行调整,但请记住,不会单独触发两个事件。JavaScript是单线程的!此外,滚动总是会多次触发滚动事件,它们会在设置超时之前触发