$.event是什么?jQuery中的fixHooks



我在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.

最新更新