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 }));