Skip to content

Commit 5aaaf69

Browse files
committed
Better handle deltaModes 1 (scroll by lines) and 2 (scroll by pages).
1 parent b6b3a70 commit 5aaaf69

File tree

5 files changed

+42
-5
lines changed

5 files changed

+42
-5
lines changed

ChangeLog.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Mouse Wheel ChangeLog
22

3+
## 3.1.7-pre
4+
5+
* Better handle the `deltaMode` values 1 (lines) and 2 (pages)
6+
37
## 3.1.6
48

59
* Deprecating `delta`, `deltaX`, and `deltaY` event handler arguments

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "jquery-mousewheel",
3-
"version": "3.1.6",
3+
"version": "3.1.7-pre",
44
"main": "./jquery.mousewheel.js",
55
"ignore": [
66
"*.json",

jquery.mousewheel.js

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh)
22
* Licensed under the MIT License (LICENSE.txt).
33
*
4-
* Version: 3.1.6
4+
* Version: 3.1.7-pre
55
*
66
* Requires: jQuery 1.2.2+
77
*/
@@ -31,7 +31,7 @@
3131
}
3232
}
3333

34-
$.event.special.mousewheel = {
34+
var special = $.event.special.mousewheel = {
3535
version: '3.1.6',
3636

3737
setup: function() {
@@ -42,6 +42,9 @@
4242
} else {
4343
this.onmousewheel = handler;
4444
}
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));
4548
},
4649

4750
teardown: function() {
@@ -52,6 +55,14 @@
5255
} else {
5356
this.onmousewheel = null;
5457
}
58+
},
59+
60+
getLineHeight: function(elem) {
61+
return parseInt($(elem).offsetParent().css('fontSize'), 10);
62+
},
63+
64+
getPageHeight: function(elem) {
65+
return $(elem).height();
5566
}
5667
};
5768

@@ -104,8 +115,26 @@
104115
// No change actually happened, no reason to go any further
105116
if ( deltaY === 0 && deltaX === 0 ) { return; }
106117

118+
// Need to convert lines and pages to pixels if we aren't already in pixels
119+
// There are three delta modes:
120+
// * deltaMode 0 is by pixels, nothing to do
121+
// * deltaMode 1 is by lines
122+
// * deltaMode 2 is by pages
123+
if ( orgEvent.deltaMode === 1 ) {
124+
var lineHeight = $.data(this, 'mousewheel-line-height');
125+
delta *= lineHeight;
126+
deltaY *= lineHeight;
127+
deltaX *= lineHeight;
128+
} else if ( orgEvent.deltaMode === 2 ) {
129+
var pageHeight = $.data(this, 'mousewheel-page-height');
130+
delta *= pageHeight;
131+
deltaY *= pageHeight;
132+
deltaX *= pageHeight;
133+
}
134+
107135
// Store lowest absolute delta to normalize the delta values
108136
absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
137+
109138
if ( !lowestDelta || absDelta < lowestDelta ) {
110139
lowestDelta = absDelta;
111140
}
@@ -119,6 +148,10 @@
119148
event.deltaX = deltaX;
120149
event.deltaY = deltaY;
121150
event.deltaFactor = lowestDelta;
151+
// Go ahead and set deltaMode to 0 since we converted to pixels
152+
// Although this is a little odd since we overwrite the deltaX/Y
153+
// properties with normalized deltas.
154+
event.deltaMode = 0;
122155

123156
// Add event and delta to the front of the arguments
124157
args.unshift(event, delta, deltaX, deltaY);

mousewheel.jquery.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"mouse",
88
"event"
99
],
10-
"version": "3.1.6",
10+
"version": "3.1.7-pre",
1111
"author": {
1212
"name": "Brandon Aaron",
1313
"url": "http://brandonaaron.net"

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "jquery-mousewheel",
3-
"version": "3.1.6",
3+
"version": "3.1.7-pre",
44
"author": "Brandon Aaron <[email protected]> (http://brandonaaron.net/)",
55
"description": "A jQuery plugin that adds cross-browser mouse wheel support.",
66
"license": "MIT",

0 commit comments

Comments
 (0)