File indexing completed on 2024-05-19 06:00:28

0001 /*! Copyright (c) 2013 Brandon Aaron (http://brandonaaron.net)
0002  * Licensed under the MIT License (LICENSE.txt).
0003  *
0004  * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
0005  * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
0006  * Thanks to: Seamus Leahy for adding deltaX and deltaY
0007  *
0008  * Version: 3.1.3
0009  *
0010  * Requires: 1.2.2+
0011  */
0012 
0013 (function (factory) {
0014     if ( typeof define === 'function' && define.amd ) {
0015         // AMD. Register as an anonymous module.
0016         define(['jquery'], factory);
0017     } else if (typeof exports === 'object') {
0018         // Node/CommonJS style for Browserify
0019         module.exports = factory;
0020     } else {
0021         // Browser globals
0022         factory(jQuery);
0023     }
0024 }(function ($) {
0025 
0026     var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'];
0027     var toBind = 'onwheel' in document || document.documentMode >= 9 ? ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'];
0028     var lowestDelta, lowestDeltaXY;
0029 
0030     if ( $.event.fixHooks ) {
0031         for ( var i = toFix.length; i; ) {
0032             $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
0033         }
0034     }
0035 
0036     $.event.special.mousewheel = {
0037         setup: function() {
0038             if ( this.addEventListener ) {
0039                 for ( var i = toBind.length; i; ) {
0040                     this.addEventListener( toBind[--i], handler, false );
0041                 }
0042             } else {
0043                 this.onmousewheel = handler;
0044             }
0045         },
0046 
0047         teardown: function() {
0048             if ( this.removeEventListener ) {
0049                 for ( var i = toBind.length; i; ) {
0050                     this.removeEventListener( toBind[--i], handler, false );
0051                 }
0052             } else {
0053                 this.onmousewheel = null;
0054             }
0055         }
0056     };
0057 
0058     $.fn.extend({
0059         mousewheel: function(fn) {
0060             return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
0061         },
0062 
0063         unmousewheel: function(fn) {
0064             return this.unbind("mousewheel", fn);
0065         }
0066     });
0067 
0068 
0069     function handler(event) {
0070         var orgEvent = event || window.event,
0071             args = [].slice.call(arguments, 1),
0072             delta = 0,
0073             deltaX = 0,
0074             deltaY = 0,
0075             absDelta = 0,
0076             absDeltaXY = 0,
0077             fn;
0078         event = $.event.fix(orgEvent);
0079         event.type = "mousewheel";
0080 
0081         // Old school scrollwheel delta
0082         if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta; }
0083         if ( orgEvent.detail )     { delta = orgEvent.detail * -1; }
0084 
0085         // New school wheel delta (wheel event)
0086         if ( orgEvent.deltaY ) {
0087             deltaY = orgEvent.deltaY * -1;
0088             delta  = deltaY;
0089         }
0090         if ( orgEvent.deltaX ) {
0091             deltaX = orgEvent.deltaX;
0092             delta  = deltaX * -1;
0093         }
0094 
0095         // Webkit
0096         if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY; }
0097         if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = orgEvent.wheelDeltaX * -1; }
0098 
0099         // Look for lowest delta to normalize the delta values
0100         absDelta = Math.abs(delta);
0101         if ( !lowestDelta || absDelta < lowestDelta ) { lowestDelta = absDelta; }
0102         absDeltaXY = Math.max(Math.abs(deltaY), Math.abs(deltaX));
0103         if ( !lowestDeltaXY || absDeltaXY < lowestDeltaXY ) { lowestDeltaXY = absDeltaXY; }
0104 
0105         // Get a whole value for the deltas
0106         fn = delta > 0 ? 'floor' : 'ceil';
0107         delta  = Math[fn](delta / lowestDelta);
0108         deltaX = Math[fn](deltaX / lowestDeltaXY);
0109         deltaY = Math[fn](deltaY / lowestDeltaXY);
0110 
0111         // Add event and delta to the front of the arguments
0112         args.unshift(event, delta, deltaX, deltaY);
0113 
0114         return ($.event.dispatch || $.event.handle).apply(this, args);
0115     }
0116 
0117 }));