【问题标题】:what is $.event.fixHooks in jQuery?jQuery 中的 $.event.fixHooks 是什么?
【发布时间】:2014-05-05 04:36:31
【问题描述】:

我在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;
    }
}

【问题讨论】:

    标签: jquery


    【解决方案1】:

    关于Event.fixHooks

    fixHooks 接口提供了一种基于事件类型的方法来扩展或 规范化 jQuery 在处理一个事件时创建的事件对象 本机浏览器事件。 fixHooks 条目是一个具有两个 属性,每个都是可选的:

    props:数组:表示应该从浏览器事件对象复制到 jQuery 事件对象的属性的字符串。如果 省略,除了标准属性之外没有其他属性被复制 jQuery 复制和规范化(例如 event.target 和 event.relatedTarget)。

    filter: Function( event, originalEvent ): jQuery 调用这个函数 在它构造 jQuery.Event 对象后,复制标准 来自 jQuery.event.props 的属性,并复制特定于 fixHooks 的 上面指定的道具(如果有的话)。该函数可以创建新属性 在事件对象上或修改现有对象。第二个论点是 浏览器的原生事件对象,也可以在 event.originalEvent.

    请注意,对于所有事件,浏览器的原生事件对象是 在 event.originalEvent 中可用;如果 jQuery 事件处理程序检查 那里的属性而不是 jQuery 的规范化事件对象, 无需创建 fixHooks 条目即可复制或修改 属性。

    例如,为“drop”事件设置一个挂钩,该事件复制 dataTransfer 属性,给 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 未标准化。
    • 如果缺少和 将它们设置为 jQuery 事件对象

    希望对你有帮助

    参考文献:

    【讨论】:

      【解决方案2】:

      阅读jQuery Event Extensions

      注意:可用 jQuery 1.7+

      【讨论】:

        【解决方案3】:

        这是Event Extensions

        You need to use at least jQuery 1.7+
        
        There is no fixHooks in jQuery 1.6.2.
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-08
          • 1970-01-01
          • 1970-01-01
          • 2010-11-06
          • 2015-07-09
          • 2011-11-21
          • 2011-10-25
          相关资源
          最近更新 更多