我在jquery.mousewheel.js中找到了这段代码
我的问题是什么是$.event.fixHooks?我在哪里可以找到相关文件?我找不到任何有用的文件来解释用法。
var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?
['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
slice = Array.prototype.slice,
nullLowestDeltaTimeout, lowestDelta;
if ( $.event.fixHooks ) {
for ( var i = toFix.length; i; ) {
$.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
}
}
关于Event.fixHooks
:
fixHooks接口提供了一种按事件类型的方式来扩展或规范化jQuery在处理事件时创建的事件对象本地浏览器事件。fixHooks条目是一个有两个条目的对象属性,每个属性都是可选的:props: Array:表示从浏览器的事件对象复制到jQuery事件对象的属性的字符串。如果省略后,除了标准属性之外,不会复制其他属性jQuery复制和规范化的对象(例如event。目标和event.relatedTarget)。
filter: Function(event, originalEvent): jQuery调用这个函数在它构造jQuery之后。事件对象,复制标准jQuery.event. propertiesprops,并复制特定于fixhooks的上面指定的Props(如果有的话)。该函数可以创建新的属性或修改已有的事件对象。第二个论点是浏览器的本机事件对象,该对象也可以在event.originalEvent .
请注意,对于所有事件,浏览器的本机事件对象是在event.originalEvent中可用;如果jQuery事件处理程序检查属性而不是jQuery的规范化事件对象,不需要创建一个fixHooks条目来复制或修改属性。
例如,为"drop"事件设置一个钩子,该事件会复制jQuery.event.fixHooks.drop:
jQuery.event.fixHooks.drop = {
props: [ "dataTransfer" ]
};
由于fixHooks是一个高级特性,很少在外部使用,jQuery不包含处理冲突的代码或接口决议。如果有可能其他代码正在赋值fixHooks指向相同的事件,代码应该检查是否存在钩住并采取适当措施。一个简单的解决方案可能是这样的:
if ( jQuery.event.fixHooks.drop ) {
throw new Error( "Someone else took the jQuery.event.fixHooks.drop hook!" );
}
jQuery.event.fixHooks.drop = {
props: [ "dataTransfer" ]
};
关于代码
if ( $.event.fixHooks ) {
for ( var i = toFix.length; i; ) {
$.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
}
}
基本上,这是扩展/规范化'wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'
事件。设置为"$.event.mouseHooks
"。现在你可能会问event.mouseHooks
有什么作用?
jQuery.event。mouseHooks是
- 用于将一些属性从原始的MouseEvent转移到jQuery事件对象。
- 标准化
event.which
(鼠标按钮被使用)跨浏览器,因为event.button
没有标准化。 - 计算
pageX
,pageY
,clientX
,clientY
和其他缺失和将它们设置为jQuery事件对象
希望有帮助
引用:
- http://learn.jquery.com/events/event-extensions/ jQuery中提供了哪些钩子?
阅读jQuery事件扩展。
注:可用jQuery 1.7+
这是Event Extensions
。
You need to use at least jQuery 1.7+
There is no fixHooks in jQuery 1.6.2.