|
52
|
1 |
/* Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net) |
|
|
2 |
* Licensed under the MIT License (LICENSE.txt). |
|
|
3 |
* |
|
|
4 |
* Thanks to: Andrew Cobby (@andrewcobby http://github.com/cobbweb) |
|
|
5 |
* - Refactored for jQuery 1.7+ only |
|
|
6 |
* - Use MozMousePixelScroll for new Gecko browsers |
|
|
7 |
* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. |
|
|
8 |
* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. |
|
|
9 |
* Thanks to: Seamus Leahy for adding deltaX and deltaY |
|
|
10 |
* |
|
|
11 |
* Version: 2.0.0 |
|
|
12 |
* |
|
|
13 |
* Recommended for jQuery 1.7+ |
|
|
14 |
* Should work with older versions though |
|
|
15 |
*/ |
|
|
16 |
|
|
|
17 |
(function($,undefined) { |
|
|
18 |
|
|
|
19 |
var types = ['DOMMouseScroll', 'mousewheel', 'MozMousePixelScroll']; |
|
|
20 |
|
|
|
21 |
if ($.event.fixHooks) { |
|
|
22 |
for (var i=types.length; i;) { |
|
|
23 |
$.event.fixHooks[types[--i]] = $.event.mouseHooks; |
|
|
24 |
} |
|
|
25 |
} |
|
|
26 |
|
|
|
27 |
$.event.special.mousewheel = { |
|
|
28 |
setup: function() { |
|
|
29 |
if (this.addEventListener) { |
|
|
30 |
for (var i=types.length; i;) { |
|
|
31 |
this.addEventListener(types[--i], handler, false); |
|
|
32 |
} |
|
|
33 |
} else { |
|
|
34 |
this.onmousewheel = handler; |
|
|
35 |
} |
|
|
36 |
}, |
|
|
37 |
|
|
|
38 |
teardown: function() { |
|
|
39 |
if (this.removeEventListener) { |
|
|
40 |
for (var i=types.length; i;) { |
|
|
41 |
this.removeEventListener(types[--i], handler, false); |
|
|
42 |
} |
|
|
43 |
} else { |
|
|
44 |
this.onmousewheel = null; |
|
|
45 |
} |
|
|
46 |
} |
|
|
47 |
}; |
|
|
48 |
|
|
|
49 |
function handler(event) { |
|
|
50 |
var orgEvent = event || window.event, args = [].slice.call(arguments, 1), delta = 0, deltaX = 0, deltaY = 0; |
|
|
51 |
event = $.event.fix(orgEvent); |
|
|
52 |
event.type = "mousewheel"; |
|
|
53 |
|
|
|
54 |
// Old school scrollwheel delta |
|
|
55 |
if (orgEvent.wheelDelta) { |
|
|
56 |
delta = orgEvent.wheelDelta / 120; |
|
|
57 |
} |
|
|
58 |
|
|
|
59 |
if (orgEvent.detail) { |
|
|
60 |
if (orgEvent.type == types[2]) { |
|
|
61 |
// Firefox 4+, unbind old DOMMouseScroll event |
|
|
62 |
this.removeEventListener(types[0], handler, false); |
|
|
63 |
delta = -orgEvent.detail / 42; |
|
|
64 |
} else { |
|
|
65 |
delta = -orgEvent.detail / 3; |
|
|
66 |
} |
|
|
67 |
} |
|
|
68 |
|
|
|
69 |
// New school multidimensional scroll (touchpads) deltas |
|
|
70 |
deltaY = delta; |
|
|
71 |
|
|
|
72 |
// Gecko |
|
|
73 |
if (orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS) { |
|
|
74 |
deltaY = 0; |
|
|
75 |
deltaX = -1 * delta; |
|
|
76 |
} |
|
|
77 |
|
|
|
78 |
// Webkit |
|
|
79 |
if (orgEvent.wheelDeltaY !== undefined) { |
|
|
80 |
deltaY = orgEvent.wheelDeltaY / 120; |
|
|
81 |
} |
|
|
82 |
|
|
|
83 |
if (orgEvent.wheelDeltaX !== undefined) { |
|
|
84 |
deltaX = -1 * orgEvent.wheelDeltaX / 120; |
|
|
85 |
} |
|
|
86 |
|
|
|
87 |
// Add event and delta to the front of the arguments |
|
|
88 |
args.unshift(event, delta, deltaX, deltaY); |
|
|
89 |
|
|
|
90 |
return ($.event.dispatch || $.event.handle).apply(this, args); |
|
|
91 |
} |
|
|
92 |
|
|
|
93 |
})(jQuery); |