1 | /*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh) |
||
2 | * Licensed under the MIT License (LICENSE.txt). |
||
3 | * |
||
4 | * Version: 3.1.9 |
||
5 | * |
||
6 | * Requires: jQuery 1.2.2+ |
||
7 | */ |
||
8 | |||
9 | (function (factory) { |
||
10 | if ( typeof define === 'function' && define.amd ) { |
||
0 ignored issues
–
show
|
|||
11 | // AMD. Register as an anonymous module. |
||
12 | define(['jquery'], factory); |
||
13 | } else if (typeof exports === 'object') { |
||
14 | // Node/CommonJS style for Browserify |
||
15 | module.exports = factory; |
||
16 | } else { |
||
17 | // Browser globals |
||
18 | factory(jQuery); |
||
19 | } |
||
20 | }(function ($) { |
||
21 | |||
22 | var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'], |
||
23 | toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ? |
||
24 | ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'], |
||
25 | slice = Array.prototype.slice, |
||
26 | nullLowestDeltaTimeout, lowestDelta; |
||
27 | |||
28 | if ( $.event.fixHooks ) { |
||
29 | for ( var i = toFix.length; i; ) { |
||
30 | $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks; |
||
31 | } |
||
32 | } |
||
33 | |||
34 | var special = $.event.special.mousewheel = { |
||
35 | version: '3.1.9', |
||
36 | |||
37 | setup: function() { |
||
38 | if ( this.addEventListener ) { |
||
39 | for ( var i = toBind.length; i; ) { |
||
40 | this.addEventListener( toBind[--i], handler, false ); |
||
41 | } |
||
42 | } else { |
||
43 | this.onmousewheel = handler; |
||
44 | } |
||
45 | // Store the line height and page height for this particular element |
||
46 | $.data(this, 'mousewheel-line-height', special.getLineHeight(this)); |
||
47 | $.data(this, 'mousewheel-page-height', special.getPageHeight(this)); |
||
48 | }, |
||
49 | |||
50 | teardown: function() { |
||
51 | if ( this.removeEventListener ) { |
||
52 | for ( var i = toBind.length; i; ) { |
||
53 | this.removeEventListener( toBind[--i], handler, false ); |
||
54 | } |
||
55 | } else { |
||
56 | this.onmousewheel = null; |
||
57 | } |
||
58 | }, |
||
59 | |||
60 | getLineHeight: function(elem) { |
||
61 | return parseInt($(elem)['offsetParent' in $.fn ? 'offsetParent' : 'parent']().css('fontSize'), 10); |
||
62 | }, |
||
63 | |||
64 | getPageHeight: function(elem) { |
||
65 | return $(elem).height(); |
||
66 | }, |
||
67 | |||
68 | settings: { |
||
69 | adjustOldDeltas: true |
||
70 | } |
||
71 | }; |
||
72 | |||
73 | $.fn.extend({ |
||
74 | mousewheel: function(fn) { |
||
75 | return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel'); |
||
76 | }, |
||
77 | |||
78 | unmousewheel: function(fn) { |
||
79 | return this.unbind('mousewheel', fn); |
||
80 | } |
||
81 | }); |
||
82 | |||
83 | |||
84 | function handler(event) { |
||
85 | var orgEvent = event || window.event, |
||
86 | args = slice.call(arguments, 1), |
||
87 | delta = 0, |
||
88 | deltaX = 0, |
||
89 | deltaY = 0, |
||
90 | absDelta = 0; |
||
91 | event = $.event.fix(orgEvent); |
||
92 | event.type = 'mousewheel'; |
||
93 | |||
94 | // Old school scrollwheel delta |
||
95 | if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; } |
||
96 | if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; } |
||
97 | if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; } |
||
98 | if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; } |
||
99 | |||
100 | // Firefox < 17 horizontal scrolling related to DOMMouseScroll event |
||
101 | if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { |
||
102 | deltaX = deltaY * -1; |
||
103 | deltaY = 0; |
||
104 | } |
||
105 | |||
106 | // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy |
||
107 | delta = deltaY === 0 ? deltaX : deltaY; |
||
108 | |||
109 | // New school wheel delta (wheel event) |
||
110 | if ( 'deltaY' in orgEvent ) { |
||
111 | deltaY = orgEvent.deltaY * -1; |
||
112 | delta = deltaY; |
||
113 | } |
||
114 | if ( 'deltaX' in orgEvent ) { |
||
115 | deltaX = orgEvent.deltaX; |
||
116 | if ( deltaY === 0 ) { delta = deltaX * -1; } |
||
117 | } |
||
118 | |||
119 | // No change actually happened, no reason to go any further |
||
120 | if ( deltaY === 0 && deltaX === 0 ) { return; } |
||
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
|
|||
121 | |||
122 | // Need to convert lines and pages to pixels if we aren't already in pixels |
||
123 | // There are three delta modes: |
||
124 | // * deltaMode 0 is by pixels, nothing to do |
||
125 | // * deltaMode 1 is by lines |
||
126 | // * deltaMode 2 is by pages |
||
127 | if ( orgEvent.deltaMode === 1 ) { |
||
128 | var lineHeight = $.data(this, 'mousewheel-line-height'); |
||
129 | delta *= lineHeight; |
||
130 | deltaY *= lineHeight; |
||
131 | deltaX *= lineHeight; |
||
132 | } else if ( orgEvent.deltaMode === 2 ) { |
||
133 | var pageHeight = $.data(this, 'mousewheel-page-height'); |
||
134 | delta *= pageHeight; |
||
135 | deltaY *= pageHeight; |
||
136 | deltaX *= pageHeight; |
||
137 | } |
||
138 | |||
139 | // Store lowest absolute delta to normalize the delta values |
||
140 | absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) ); |
||
141 | |||
142 | if ( !lowestDelta || absDelta < lowestDelta ) { |
||
143 | lowestDelta = absDelta; |
||
144 | |||
145 | // Adjust older deltas if necessary |
||
146 | if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) { |
||
147 | lowestDelta /= 40; |
||
148 | } |
||
149 | } |
||
150 | |||
151 | // Adjust older deltas if necessary |
||
152 | if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) { |
||
153 | // Divide all the things by 40! |
||
154 | delta /= 40; |
||
155 | deltaX /= 40; |
||
156 | deltaY /= 40; |
||
157 | } |
||
158 | |||
159 | // Get a whole, normalized value for the deltas |
||
160 | delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta); |
||
161 | deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta); |
||
162 | deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta); |
||
163 | |||
164 | // Add information to the event object |
||
165 | event.deltaX = deltaX; |
||
166 | event.deltaY = deltaY; |
||
167 | event.deltaFactor = lowestDelta; |
||
168 | // Go ahead and set deltaMode to 0 since we converted to pixels |
||
169 | // Although this is a little odd since we overwrite the deltaX/Y |
||
170 | // properties with normalized deltas. |
||
171 | event.deltaMode = 0; |
||
172 | |||
173 | // Add event and delta to the front of the arguments |
||
174 | args.unshift(event, delta, deltaX, deltaY); |
||
175 | |||
176 | // Clearout lowestDelta after sometime to better |
||
177 | // handle multiple device types that give different |
||
178 | // a different lowestDelta |
||
179 | // Ex: trackpad = 3 and mouse wheel = 120 |
||
180 | if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); } |
||
181 | nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200); |
||
182 | |||
183 | return ($.event.dispatch || $.event.handle).apply(this, args); |
||
184 | } |
||
185 | |||
186 | function nullLowestDelta() { |
||
187 | lowestDelta = null; |
||
188 | } |
||
189 | |||
190 | function shouldAdjustOldDeltas(orgEvent, absDelta) { |
||
191 | // If this is an older event and the delta is divisable by 120, |
||
192 | // then we are assuming that the browser is treating this as an |
||
193 | // older mouse wheel event and that we should divide the deltas |
||
194 | // by 40 to try and get a more usable deltaFactor. |
||
195 | // Side note, this actually impacts the reported scroll distance |
||
196 | // in older browsers and can cause scrolling to be slower than native. |
||
197 | // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false. |
||
198 | return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0; |
||
199 | } |
||
200 | |||
201 | })); |
||
202 |
This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.
To learn more about declaring variables in Javascript, see the MDN.