Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / ui / new_ui / ui / javascripts / jquery.mousewheel.js @ 0ef95fe4

History | View | Annotate | Download (3.8 kB)

1 0d264436 Olga Brani
/*! Copyright (c) 2013 Brandon Aaron (http://brandonaaron.net)
2 0d264436 Olga Brani
 * Licensed under the MIT License (LICENSE.txt).
3 0d264436 Olga Brani
 *
4 0d264436 Olga Brani
 * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
5 0d264436 Olga Brani
 * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
6 0d264436 Olga Brani
 * Thanks to: Seamus Leahy for adding deltaX and deltaY
7 0d264436 Olga Brani
 *
8 0d264436 Olga Brani
 * Version: 3.1.3
9 0d264436 Olga Brani
 *
10 0d264436 Olga Brani
 * Requires: 1.2.2+
11 0d264436 Olga Brani
 */
12 0d264436 Olga Brani
13 0d264436 Olga Brani
(function (factory) {
14 0d264436 Olga Brani
    if ( typeof define === 'function' && define.amd ) {
15 0d264436 Olga Brani
        // AMD. Register as an anonymous module.
16 0d264436 Olga Brani
        define(['jquery'], factory);
17 0d264436 Olga Brani
    } else if (typeof exports === 'object') {
18 0d264436 Olga Brani
        // Node/CommonJS style for Browserify
19 0d264436 Olga Brani
        module.exports = factory;
20 0d264436 Olga Brani
    } else {
21 0d264436 Olga Brani
        // Browser globals
22 0d264436 Olga Brani
        factory(jQuery);
23 0d264436 Olga Brani
    }
24 0d264436 Olga Brani
}(function ($) {
25 0d264436 Olga Brani
26 0d264436 Olga Brani
    var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'];
27 0d264436 Olga Brani
    var toBind = 'onwheel' in document || document.documentMode >= 9 ? ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'];
28 0d264436 Olga Brani
    var lowestDelta, lowestDeltaXY;
29 0d264436 Olga Brani
30 0d264436 Olga Brani
    if ( $.event.fixHooks ) {
31 0d264436 Olga Brani
        for ( var i = toFix.length; i; ) {
32 0d264436 Olga Brani
            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
33 0d264436 Olga Brani
        }
34 0d264436 Olga Brani
    }
35 0d264436 Olga Brani
36 0d264436 Olga Brani
    $.event.special.mousewheel = {
37 0d264436 Olga Brani
        setup: function() {
38 0d264436 Olga Brani
            if ( this.addEventListener ) {
39 0d264436 Olga Brani
                for ( var i = toBind.length; i; ) {
40 0d264436 Olga Brani
                    this.addEventListener( toBind[--i], handler, false );
41 0d264436 Olga Brani
                }
42 0d264436 Olga Brani
            } else {
43 0d264436 Olga Brani
                this.onmousewheel = handler;
44 0d264436 Olga Brani
            }
45 0d264436 Olga Brani
        },
46 0d264436 Olga Brani
47 0d264436 Olga Brani
        teardown: function() {
48 0d264436 Olga Brani
            if ( this.removeEventListener ) {
49 0d264436 Olga Brani
                for ( var i = toBind.length; i; ) {
50 0d264436 Olga Brani
                    this.removeEventListener( toBind[--i], handler, false );
51 0d264436 Olga Brani
                }
52 0d264436 Olga Brani
            } else {
53 0d264436 Olga Brani
                this.onmousewheel = null;
54 0d264436 Olga Brani
            }
55 0d264436 Olga Brani
        }
56 0d264436 Olga Brani
    };
57 0d264436 Olga Brani
58 0d264436 Olga Brani
    $.fn.extend({
59 0d264436 Olga Brani
        mousewheel: function(fn) {
60 0d264436 Olga Brani
            return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
61 0d264436 Olga Brani
        },
62 0d264436 Olga Brani
63 0d264436 Olga Brani
        unmousewheel: function(fn) {
64 0d264436 Olga Brani
            return this.unbind("mousewheel", fn);
65 0d264436 Olga Brani
        }
66 0d264436 Olga Brani
    });
67 0d264436 Olga Brani
68 0d264436 Olga Brani
69 0d264436 Olga Brani
    function handler(event) {
70 0d264436 Olga Brani
        var orgEvent = event || window.event,
71 0d264436 Olga Brani
            args = [].slice.call(arguments, 1),
72 0d264436 Olga Brani
            delta = 0,
73 0d264436 Olga Brani
            deltaX = 0,
74 0d264436 Olga Brani
            deltaY = 0,
75 0d264436 Olga Brani
            absDelta = 0,
76 0d264436 Olga Brani
            absDeltaXY = 0,
77 0d264436 Olga Brani
            fn;
78 0d264436 Olga Brani
        event = $.event.fix(orgEvent);
79 0d264436 Olga Brani
        event.type = "mousewheel";
80 0d264436 Olga Brani
81 0d264436 Olga Brani
        // Old school scrollwheel delta
82 0d264436 Olga Brani
        if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta; }
83 0d264436 Olga Brani
        if ( orgEvent.detail )     { delta = orgEvent.detail * -1; }
84 0d264436 Olga Brani
85 0d264436 Olga Brani
        // New school wheel delta (wheel event)
86 0d264436 Olga Brani
        if ( orgEvent.deltaY ) {
87 0d264436 Olga Brani
            deltaY = orgEvent.deltaY * -1;
88 0d264436 Olga Brani
            delta  = deltaY;
89 0d264436 Olga Brani
        }
90 0d264436 Olga Brani
        if ( orgEvent.deltaX ) {
91 0d264436 Olga Brani
            deltaX = orgEvent.deltaX;
92 0d264436 Olga Brani
            delta  = deltaX * -1;
93 0d264436 Olga Brani
        }
94 0d264436 Olga Brani
95 0d264436 Olga Brani
        // Webkit
96 0d264436 Olga Brani
        if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY; }
97 0d264436 Olga Brani
        if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = orgEvent.wheelDeltaX * -1; }
98 0d264436 Olga Brani
99 0d264436 Olga Brani
        // Look for lowest delta to normalize the delta values
100 0d264436 Olga Brani
        absDelta = Math.abs(delta);
101 0d264436 Olga Brani
        if ( !lowestDelta || absDelta < lowestDelta ) { lowestDelta = absDelta; }
102 0d264436 Olga Brani
        absDeltaXY = Math.max(Math.abs(deltaY), Math.abs(deltaX));
103 0d264436 Olga Brani
        if ( !lowestDeltaXY || absDeltaXY < lowestDeltaXY ) { lowestDeltaXY = absDeltaXY; }
104 0d264436 Olga Brani
105 0d264436 Olga Brani
        // Get a whole value for the deltas
106 0d264436 Olga Brani
        fn = delta > 0 ? 'floor' : 'ceil';
107 0d264436 Olga Brani
        delta  = Math[fn](delta / lowestDelta);
108 0d264436 Olga Brani
        deltaX = Math[fn](deltaX / lowestDeltaXY);
109 0d264436 Olga Brani
        deltaY = Math[fn](deltaY / lowestDeltaXY);
110 0d264436 Olga Brani
111 0d264436 Olga Brani
        // Add event and delta to the front of the arguments
112 0d264436 Olga Brani
        args.unshift(event, delta, deltaX, deltaY);
113 0d264436 Olga Brani
114 0d264436 Olga Brani
        return ($.event.dispatch || $.event.handle).apply(this, args);
115 0d264436 Olga Brani
    }
116 0d264436 Olga Brani
117 0d264436 Olga Brani
}));