From 4b3f1b73b290fdde88c60e7c4940fe09b20851a8 Mon Sep 17 00:00:00 2001 From: Brandon Aaron Date: Sat, 23 Feb 2013 18:12:57 -0600 Subject: [PATCH] fix rounding issue when delta is less than 0 --- jquery.mousewheel.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/jquery.mousewheel.js b/jquery.mousewheel.js index 8c603041b..4f402485b 100755 --- a/jquery.mousewheel.js +++ b/jquery.mousewheel.js @@ -64,7 +64,7 @@ function handler(event) { - var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, deltaX = 0, deltaY = 0, absDelta = 0, absDeltaXY = 0; + var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, deltaX = 0, deltaY = 0, absDelta = 0, absDeltaXY = 0, fn; event = $.event.fix(orgEvent); event.type = "mousewheel"; @@ -86,14 +86,20 @@ if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY; } if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = orgEvent.wheelDeltaX * -1; } + // Look for lowest delta to normalize the delta values absDelta = Math.abs(delta); if ( !lowestDelta || absDelta < lowestDelta ) { lowestDelta = absDelta; } - absDeltaXY = Math.max( Math.abs(deltaY), Math.abs(deltaX) ); if ( !lowestDeltaXY || absDeltaXY < lowestDeltaXY ) { lowestDeltaXY = absDeltaXY; } + // Get a whole value for the deltas + fn = delta > 0 ? 'floor' : 'ceil'; + delta = Math[fn](delta/lowestDelta); + deltaX = Math[fn](deltaX/lowestDeltaXY); + deltaY = Math[fn](deltaY/lowestDeltaXY); + // Add event and delta to the front of the arguments - args.unshift(event, Math.floor(delta/lowestDelta), Math.floor(deltaX/lowestDeltaXY), Math.floor(deltaY/lowestDeltaXY)); + args.unshift(event, delta, deltaX, deltaY); return ($.event.dispatch || $.event.handle).apply(this, args); }