javascript - jQuery:在事件处理期间事件对象是否隐式传递?

标签 javascript jquery

我有以下函数,它将一系列事件处理程序绑定(bind)到 DOM:

  $( document ).on({
    "mousewheel": scrollHandler,
    "DOMMouseScroll": ("onmousewheel" in document) ? null : scrollHandler, // Firefox
    "mousedown": function( e ) {
      if( e.button === 1 ) {
        e.preventDefault();
        return false;
      }
    }
  });

  $( window ).on( "resize", function() { scrollToStep( step ); } ); // Re-centers the screen

每个事件处理程序都链接到scrollHandler,但没有一个事件处理程序将事件对象传递给scrollHandler。然而,在scrollHandler的函数定义中,该函数具有对事件对象的完全访问权限:

function scrollHandler( e ) {
  var scrollDelta = e.originalEvent.wheelDelta || -e.originalEvent.detail,
      dir = scrollDelta / ( Math.abs( scrollDelta ) );

  e.preventDefault();
  $( window ).scrollTop( 0 ).scrollLeft( 0 );
  scrollSteps( -dir * STEP_SIZE );
}

这怎么可能? scrollHandler 中的参数 e 来自哪里?

最佳答案

你对这里发生的事情感到困惑。 "mousedown""mousewheel"实际上正在做同样的事情。 on 中未调用这些函数称呼。他们只是告诉 jQuery,“嘿,下次这个事件发生时调用这个函数并传递当前事件”。它是内联定义的(如 "mousedown" )还是在其他地方定义的(如 "mousewheel" )并不重要(只要它们在同一范围内)。

如果这仍然没有意义,您可能需要在 Google 上搜索有关“JavaScript 中的回调”的文章。

关于javascript - jQuery:在事件处理期间事件对象是否隐式传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26665815/

相关文章:

javascript - 帧源变化检测

JavaScript scrollTo 方法什么都不做?

jquery - 将函数应用于具有 ID 的同一 Div 中的所有表 - jQuery 显示/隐藏

javascript - jquery 倒计时字符在 IE 中不起作用

jquery - 如何管理 jQuery ui 选项卡 fx : toggle option and activate: function () at the same event?

javascript - jquery 自动完成突出显示

javascript - 在 Ember 中更改断开的链接图标

javascript - 在 React 中,如何立即触发动画而不是让它们排队?

javascript - 代理中未定义的 WordPress 符号称为 AJAX 脚本

jquery - 在express服务器上使用jquery发布json