Projet

Général

Profil

Paste
Télécharger (3,31 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / jquery_update / replace / ui / external / jquery.mousewheel.js @ 503b3f7b

1
/*! Copyright (c) 2013 Brandon Aaron (http://brandonaaron.net)
2
 * Licensed under the MIT License (LICENSE.txt).
3
 *
4
 * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
5
 * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
6
 * Thanks to: Seamus Leahy for adding deltaX and deltaY
7
 *
8
 * Version: 3.1.0
9
 *
10
 * Requires: 1.2.2+
11
 */
12

    
13
(function (factory) {
14
    if (typeof define === 'function' && define.amd) {
15
        // AMD. Register as an anonymous module.
16
        define(['jquery'], factory);
17
    } else {
18
        // Browser globals
19
        factory(jQuery);
20
    }
21
}(function ($) {
22

    
23
    var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll'];
24
    var toBind = 'onwheel' in document || document.documentMode >= 9 ? ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'];
25
    var lowestDelta, lowestDeltaXY;
26

    
27
    if ($.event.fixHooks) {
28
        for ( var i=toFix.length; i; ) {
29
            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
30
        }
31
    }
32

    
33
    $.event.special.mousewheel = {
34
        setup: function() {
35
            if ( this.addEventListener ) {
36
                for ( var i=toBind.length; i; ) {
37
                    this.addEventListener( toBind[--i], handler, false );
38
                }
39
            } else {
40
                this.onmousewheel = handler;
41
            }
42
        },
43

    
44
        teardown: function() {
45
            if ( this.removeEventListener ) {
46
                for ( var i=toBind.length; i; ) {
47
                    this.removeEventListener( toBind[--i], handler, false );
48
                }
49
            } else {
50
                this.onmousewheel = null;
51
            }
52
        }
53
    };
54

    
55
    $.fn.extend({
56
        mousewheel: function(fn) {
57
            return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
58
        },
59

    
60
        unmousewheel: function(fn) {
61
            return this.unbind("mousewheel", fn);
62
        }
63
    });
64

    
65

    
66
    function handler(event) {
67
        var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, deltaX = 0, deltaY = 0, absDelta = 0, absDeltaXY = 0;
68
        event = $.event.fix(orgEvent);
69
        event.type = "mousewheel";
70

    
71
        // Old school scrollwheel delta
72
        if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta;  }
73
        if ( orgEvent.detail     ) { delta = orgEvent.detail * -1; }
74

    
75
        // New school wheel delta (wheel event)
76
        if ( orgEvent.deltaY ) {
77
            deltaY = orgEvent.deltaY * -1;
78
            delta  = deltaY;
79
        }
80
        if ( orgEvent.deltaX ) {
81
            deltaX = orgEvent.deltaX;
82
            delta  = deltaX * -1;
83
        }
84

    
85
        // Webkit
86
        if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY;      }
87
        if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = orgEvent.wheelDeltaX * -1; }
88

    
89
        absDelta = Math.abs(delta);
90
        if ( !lowestDelta || absDelta < lowestDelta ) { lowestDelta = absDelta; }
91

    
92
        absDeltaXY = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
93
        if ( !lowestDeltaXY || absDeltaXY < lowestDeltaXY ) { lowestDeltaXY = absDeltaXY; }
94

    
95
        // Add event and delta to the front of the arguments
96
        args.unshift(event, Math.floor(delta/lowestDelta), Math.floor(deltaX/lowestDeltaXY), Math.floor(deltaY/lowestDeltaXY));
97

    
98
        return ($.event.dispatch || $.event.handle).apply(this, args);
99
    }
100

    
101
}));