我有以下函数,它将一系列事件处理程序绑定(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/