|
1 |
| -/*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net) |
| 1 | +/*! Copyright (c) 2013 Brandon Aaron (http://brandonaaron.net) |
2 | 2 | * Licensed under the MIT License (LICENSE.txt).
|
3 | 3 | *
|
4 | 4 | * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
|
5 | 5 | * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
|
6 | 6 | * Thanks to: Seamus Leahy for adding deltaX and deltaY
|
7 | 7 | *
|
8 |
| - * Version: 3.0.6 |
9 |
| - * |
| 8 | + * Version: 3.1.0 |
| 9 | + * |
10 | 10 | * Requires: 1.2.2+
|
11 | 11 | */
|
12 | 12 |
|
13 |
| -(function($) { |
| 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 ($) { |
14 | 22 |
|
15 |
| -var types = ['DOMMouseScroll', 'mousewheel']; |
| 23 | + var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll']; |
| 24 | + var toBind = 'onwheel' in document || document.documentMode >= 9 ? ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll']; |
| 25 | + var lowestDelta, lowestDeltaXY; |
16 | 26 |
|
17 |
| -if ($.event.fixHooks) { |
18 |
| - for ( var i=types.length; i; ) { |
19 |
| - $.event.fixHooks[ types[--i] ] = $.event.mouseHooks; |
| 27 | + if ($.event.fixHooks) { |
| 28 | + for ( var i=toFix.length; i; ) { |
| 29 | + $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks; |
| 30 | + } |
20 | 31 | }
|
21 |
| -} |
22 | 32 |
|
23 |
| -$.event.special.mousewheel = { |
24 |
| - setup: function() { |
25 |
| - if ( this.addEventListener ) { |
26 |
| - for ( var i=types.length; i; ) { |
27 |
| - this.addEventListener( types[--i], handler, false ); |
| 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; |
28 | 41 | }
|
29 |
| - } else { |
30 |
| - this.onmousewheel = handler; |
31 |
| - } |
32 |
| - }, |
33 |
| - |
34 |
| - teardown: function() { |
35 |
| - if ( this.removeEventListener ) { |
36 |
| - for ( var i=types.length; i; ) { |
37 |
| - this.removeEventListener( types[--i], handler, false ); |
| 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; |
38 | 51 | }
|
39 |
| - } else { |
40 |
| - this.onmousewheel = null; |
41 | 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); |
42 | 99 | }
|
43 |
| -}; |
44 |
| - |
45 |
| -$.fn.extend({ |
46 |
| - mousewheel: function(fn) { |
47 |
| - return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel"); |
48 |
| - }, |
49 |
| - |
50 |
| - unmousewheel: function(fn) { |
51 |
| - return this.unbind("mousewheel", fn); |
52 |
| - } |
53 |
| -}); |
54 |
| - |
55 |
| - |
56 |
| -function handler(event) { |
57 |
| - var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0; |
58 |
| - event = $.event.fix(orgEvent); |
59 |
| - event.type = "mousewheel"; |
60 |
| - |
61 |
| - // Old school scrollwheel delta |
62 |
| - if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta/120; } |
63 |
| - if ( orgEvent.detail ) { delta = -orgEvent.detail/3; } |
64 |
| - |
65 |
| - // New school multidimensional scroll (touchpads) deltas |
66 |
| - deltaY = delta; |
67 |
| - |
68 |
| - // Gecko |
69 |
| - if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { |
70 |
| - deltaY = 0; |
71 |
| - deltaX = -1*delta; |
72 |
| - } |
73 |
| - |
74 |
| - // Webkit |
75 |
| - if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; } |
76 |
| - if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; } |
77 |
| - |
78 |
| - // Add event and delta to the front of the arguments |
79 |
| - args.unshift(event, delta, deltaX, deltaY); |
80 |
| - |
81 |
| - return ($.event.dispatch || $.event.handle).apply(this, args); |
82 |
| -} |
83 |
| - |
84 |
| -})(jQuery); |
| 100 | + |
| 101 | +})); |
0 commit comments