|
26 | 26 | "use strict";
|
27 | 27 |
|
28 | 28 | var nullLowestDeltaTimeout, lowestDelta,
|
29 |
| - modernEvents = !!$.fn.on, |
30 |
| - toFix = [ "wheel", "mousewheel", "DOMMouseScroll", "MozMousePixelScroll" ], |
31 |
| - toBind = ( "onwheel" in window.document || window.document.documentMode >= 9 ) ? |
32 |
| - [ "wheel" ] : [ "mousewheel", "DomMouseScroll", "MozMousePixelScroll" ], |
33 | 29 | slice = Array.prototype.slice;
|
34 | 30 |
|
35 | 31 | if ( $.event.fixHooks ) {
|
36 |
| - for ( var i = toFix.length; i; ) { |
37 |
| - $.event.fixHooks[ toFix[ --i ] ] = $.event.mouseHooks; |
38 |
| - } |
| 32 | + $.event.fixHooks.wheel = $.event.mouseHooks; |
39 | 33 | }
|
40 | 34 |
|
41 | 35 | var special = $.event.special.mousewheel = {
|
42 | 36 | version: "@VERSION",
|
43 | 37 |
|
44 | 38 | setup: function() {
|
45 |
| - if ( this.addEventListener ) { |
46 |
| - for ( var i = toBind.length; i; ) { |
47 |
| - this.addEventListener( toBind[ --i ], handler, false ); |
48 |
| - } |
49 |
| - } else { |
50 |
| - this.onmousewheel = handler; |
51 |
| - } |
| 39 | + this.addEventListener( "wheel", handler, false ); |
52 | 40 |
|
53 | 41 | // Store the line height and page height for this particular element
|
54 | 42 | $.data( this, "mousewheel-line-height", special.getLineHeight( this ) );
|
55 | 43 | $.data( this, "mousewheel-page-height", special.getPageHeight( this ) );
|
56 | 44 | },
|
57 | 45 |
|
58 | 46 | teardown: function() {
|
59 |
| - if ( this.removeEventListener ) { |
60 |
| - for ( var i = toBind.length; i; ) { |
61 |
| - this.removeEventListener( toBind[ --i ], handler, false ); |
62 |
| - } |
63 |
| - } else { |
64 |
| - this.onmousewheel = null; |
65 |
| - } |
| 47 | + this.removeEventListener( "wheel", handler, false ); |
66 | 48 |
|
67 | 49 | // Clean up the data we added to the element
|
68 | 50 | $.removeData( this, "mousewheel-line-height" );
|
|
71 | 53 |
|
72 | 54 | getLineHeight: function( elem ) {
|
73 | 55 | var $elem = $( elem ),
|
74 |
| - $parent = $elem[ "offsetParent" in $.fn ? "offsetParent" : "parent" ](); |
| 56 | + $parent = $elem.offsetParent(); |
75 | 57 | if ( !$parent.length ) {
|
76 | 58 | $parent = $( "body" );
|
77 | 59 | }
|
78 | 60 | return parseInt( $parent.css( "fontSize" ), 10 ) ||
|
79 |
| - parseInt( $elem.css( "fontSize" ), 10 ) || 16; |
| 61 | + parseInt( $elem.css( "fontSize" ), 10 ) || 16; |
80 | 62 | },
|
81 | 63 |
|
82 | 64 | getPageHeight: function( elem ) {
|
83 | 65 | return $( elem ).height();
|
84 | 66 | },
|
85 | 67 |
|
86 | 68 | settings: {
|
87 |
| - adjustOldDeltas: true, // see shouldAdjustOldDeltas() below |
88 | 69 | normalizeOffset: true // calls getBoundingClientRect for each event
|
89 | 70 | }
|
90 | 71 | };
|
91 | 72 |
|
92 |
| - $.fn.extend( { |
93 |
| - mousewheel: function( fn ) { |
94 |
| - return fn ? |
95 |
| - this[ modernEvents ? "on" : "bind" ]( "mousewheel", fn ) : |
96 |
| - this.trigger( "mousewheel" ); |
97 |
| - }, |
98 |
| - |
99 |
| - unmousewheel: function( fn ) { |
100 |
| - return this[ modernEvents ? "off" : "unbind" ]( "mousewheel", fn ); |
101 |
| - } |
102 |
| - } ); |
103 |
| - |
| 73 | + function handler( origEvent ) { |
| 74 | + var args = slice.call( arguments, 1 ), |
| 75 | + delta = 0, |
| 76 | + deltaX = 0, |
| 77 | + deltaY = 0, |
| 78 | + absDelta = 0, |
| 79 | + event = $.event.fix( origEvent ); |
104 | 80 |
|
105 |
| - function handler( event ) { |
106 |
| - var orgEvent = event || window.event, |
107 |
| - args = slice.call( arguments, 1 ), |
108 |
| - delta = 0, |
109 |
| - deltaX = 0, |
110 |
| - deltaY = 0, |
111 |
| - absDelta = 0; |
112 |
| - event = $.event.fix( orgEvent ); |
113 | 81 | event.type = "mousewheel";
|
114 | 82 |
|
115 |
| - // Old school scrollwheel delta |
116 |
| - if ( "detail" in orgEvent ) { |
117 |
| - deltaY = orgEvent.detail * -1; |
118 |
| - } |
119 |
| - if ( "wheelDelta" in orgEvent ) { |
120 |
| - deltaY = orgEvent.wheelDelta; |
121 |
| - } |
122 |
| - if ( "wheelDeltaY" in orgEvent ) { |
123 |
| - deltaY = orgEvent.wheelDeltaY; |
124 |
| - } |
125 |
| - if ( "wheelDeltaX" in orgEvent ) { |
126 |
| - deltaX = orgEvent.wheelDeltaX * -1; |
127 |
| - } |
128 |
| - |
129 |
| - // Firefox < 17 horizontal scrolling related to DOMMouseScroll event |
130 |
| - if ( "axis" in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { |
131 |
| - deltaX = deltaY * -1; |
132 |
| - deltaY = 0; |
133 |
| - } |
134 |
| - |
135 |
| - // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatability |
136 |
| - delta = deltaY === 0 ? deltaX : deltaY; |
137 |
| - |
138 | 83 | // New school wheel delta (wheel event)
|
139 |
| - if ( "deltaY" in orgEvent ) { |
140 |
| - deltaY = orgEvent.deltaY * -1; |
| 84 | + if ( "deltaY" in origEvent ) { |
| 85 | + deltaY = origEvent.deltaY * -1; |
141 | 86 | delta = deltaY;
|
142 | 87 | }
|
143 |
| - if ( "deltaX" in orgEvent ) { |
144 |
| - deltaX = orgEvent.deltaX; |
| 88 | + if ( "deltaX" in origEvent ) { |
| 89 | + deltaX = origEvent.deltaX; |
145 | 90 | if ( deltaY === 0 ) {
|
146 | 91 | delta = deltaX * -1;
|
147 | 92 | }
|
|
157 | 102 | // * deltaMode 0 is by pixels, nothing to do
|
158 | 103 | // * deltaMode 1 is by lines
|
159 | 104 | // * deltaMode 2 is by pages
|
160 |
| - if ( orgEvent.deltaMode === 1 ) { |
| 105 | + if ( origEvent.deltaMode === 1 ) { |
161 | 106 | var lineHeight = $.data( this, "mousewheel-line-height" );
|
162 | 107 | delta *= lineHeight;
|
163 | 108 | deltaY *= lineHeight;
|
164 | 109 | deltaX *= lineHeight;
|
165 |
| - } else if ( orgEvent.deltaMode === 2 ) { |
| 110 | + } else if ( origEvent.deltaMode === 2 ) { |
166 | 111 | var pageHeight = $.data( this, "mousewheel-page-height" );
|
167 | 112 | delta *= pageHeight;
|
168 | 113 | deltaY *= pageHeight;
|
|
174 | 119 |
|
175 | 120 | if ( !lowestDelta || absDelta < lowestDelta ) {
|
176 | 121 | lowestDelta = absDelta;
|
177 |
| - |
178 |
| - // Adjust older deltas if necessary |
179 |
| - if ( shouldAdjustOldDeltas( orgEvent, absDelta ) ) { |
180 |
| - lowestDelta /= 40; |
181 |
| - } |
182 |
| - } |
183 |
| - |
184 |
| - // Adjust older deltas if necessary |
185 |
| - if ( shouldAdjustOldDeltas( orgEvent, absDelta ) ) { |
186 |
| - |
187 |
| - // Divide all the things by 40! |
188 |
| - delta /= 40; |
189 |
| - deltaX /= 40; |
190 |
| - deltaY /= 40; |
191 | 122 | }
|
192 | 123 |
|
193 | 124 | // Get a whole, normalized value for the deltas
|
|
219 | 150 | // handle multiple device types that give different
|
220 | 151 | // a different lowestDelta
|
221 | 152 | // Ex: trackpad = 3 and mouse wheel = 120
|
222 |
| - if ( nullLowestDeltaTimeout ) { |
223 |
| - window.clearTimeout( nullLowestDeltaTimeout ); |
224 |
| - } |
| 153 | + window.clearTimeout( nullLowestDeltaTimeout ); |
225 | 154 | nullLowestDeltaTimeout = window.setTimeout( function() {
|
226 | 155 | lowestDelta = null;
|
227 | 156 | }, 200 );
|
228 | 157 |
|
229 |
| - return ( $.event.dispatch || $.event.handle ).apply( this, args ); |
230 |
| - } |
231 |
| - |
232 |
| - function shouldAdjustOldDeltas( orgEvent, absDelta ) { |
233 |
| - |
234 |
| - // If this is an older event and the delta is divisible by 120, |
235 |
| - // then we are assuming that the browser is treating this as an |
236 |
| - // older mouse wheel event and that we should divide the deltas |
237 |
| - // by 40 to try and get a more usable deltaFactor. |
238 |
| - // Side note, this actually impacts the reported scroll distance |
239 |
| - // in older browsers and can cause scrolling to be slower than native. |
240 |
| - // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false. |
241 |
| - return special.settings.adjustOldDeltas && orgEvent.type === "mousewheel" && |
242 |
| - absDelta % 120 === 0; |
| 158 | + return $.event.dispatch.apply( this, args ); |
243 | 159 | }
|
244 | 160 |
|
245 | 161 | } );
|
0 commit comments