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
8
+ * Version: 3.1.0
9
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
}
42
- }
43
- } ;
53
+ } ;
44
54
45
- $ . fn . extend ( {
46
- mousewheel : function ( fn ) {
47
- return fn ? this . bind ( "mousewheel" , fn ) : this . trigger ( "mousewheel" ) ;
48
- } ,
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
+ } ) ;
49
64
50
- unmousewheel : function ( fn ) {
51
- return this . unbind ( "mousewheel" , fn ) ;
52
- }
53
- } ) ;
54
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" ;
55
70
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" ;
71
+ // Old school scrollwheel delta
72
+ if ( orgEvent . wheelDelta ) { delta = orgEvent . wheelDelta ; }
73
+ if ( orgEvent . detail ) { delta = orgEvent . detail * - 1 ; }
60
74
61
- // Old school scrollwheel delta
62
- if ( orgEvent . wheelDelta ) { delta = orgEvent . wheelDelta / 120 ; }
63
- if ( orgEvent . detail ) { delta = - orgEvent . detail / 3 ; }
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
+ }
64
84
65
- // New school multidimensional scroll (touchpads) deltas
66
- deltaY = delta ;
85
+ // Webkit
86
+ if ( orgEvent . wheelDeltaY !== undefined ) { deltaY = orgEvent . wheelDeltaY ; }
87
+ if ( orgEvent . wheelDeltaX !== undefined ) { deltaX = orgEvent . wheelDeltaX * - 1 ; }
67
88
68
- // Gecko
69
- if ( orgEvent . axis !== undefined && orgEvent . axis === orgEvent . HORIZONTAL_AXIS ) {
70
- deltaY = 0 ;
71
- deltaX = - 1 * delta ;
72
- }
89
+ absDelta = Math . abs ( delta ) ;
90
+ if ( ! lowestDelta || absDelta < lowestDelta ) { lowestDelta = absDelta ; }
73
91
74
- // Webkit
75
- if ( orgEvent . wheelDeltaY !== undefined ) { deltaY = orgEvent . wheelDeltaY / 120 ; }
76
- if ( orgEvent . wheelDeltaX !== undefined ) { deltaX = - 1 * orgEvent . wheelDeltaX / 120 ; }
92
+ absDeltaXY = Math . max ( Math . abs ( deltaY ) , Math . abs ( deltaX ) ) ;
93
+ if ( ! lowestDeltaXY || absDeltaXY < lowestDeltaXY ) { lowestDeltaXY = absDeltaXY ; }
77
94
78
- // Add event and delta to the front of the arguments
79
- args . unshift ( event , delta , deltaX , deltaY ) ;
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 ) ) ;
80
97
81
- return ( $ . event . dispatch || $ . event . handle ) . apply ( this , args ) ;
82
- }
98
+ return ( $ . event . dispatch || $ . event . handle ) . apply ( this , args ) ;
99
+ }
83
100
84
- } ) ( jQuery ) ;
101
+ } ) ) ;
0 commit comments