From 4de2d39f63965e82e88b12a7bc668fea20fbe7dc Mon Sep 17 00:00:00 2001 From: Andreas Svensson Date: Wed, 1 Jan 2014 16:00:38 +0100 Subject: [PATCH] Fix WheelEvent incorrectly inverting sign of deltaY --- src/event/synthetic/SyntheticWheelEvent.js | 17 ++++++++++------- .../__tests__/SyntheticWheelEvent-test.js | 4 ++-- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/event/synthetic/SyntheticWheelEvent.js b/src/event/synthetic/SyntheticWheelEvent.js index b18d208f27..e25d7239a4 100644 --- a/src/event/synthetic/SyntheticWheelEvent.js +++ b/src/event/synthetic/SyntheticWheelEvent.js @@ -27,7 +27,6 @@ var SyntheticMouseEvent = require('SyntheticMouseEvent'); */ var WheelEventInterface = { deltaX: function(event) { - // NOTE: IE<9 does not support x-axis delta. return ( 'deltaX' in event ? event.deltaX : // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive). @@ -36,15 +35,19 @@ var WheelEventInterface = { }, deltaY: function(event) { return ( - // Normalize (up is positive). - 'deltaY' in event ? -event.deltaY : - // Fallback to `wheelDeltaY` for Webkit. - 'wheelDeltaY' in event ? event.wheelDeltaY : - // Fallback to `wheelDelta` for IE<9. - 'wheelDelta' in event ? event.wheelDelta : 0 + 'deltaY' in event ? event.deltaY : + // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive). + 'wheelDeltaY' in event ? -event.wheelDeltaY : + // Fallback to `wheelDelta` for IE<9 and normalize (down is positive). + 'wheelDelta' in event ? -event.wheelDelta : 0 ); }, deltaZ: null, + + // Browsers without "deltaMode" is reporting in raw wheel delta where one + // notch on the scroll is always +/- 120, roughly equivalent to pixels. + // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or + // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size. deltaMode: null }; diff --git a/src/event/synthetic/__tests__/SyntheticWheelEvent-test.js b/src/event/synthetic/__tests__/SyntheticWheelEvent-test.js index c14afa895c..14bda40b69 100644 --- a/src/event/synthetic/__tests__/SyntheticWheelEvent-test.js +++ b/src/event/synthetic/__tests__/SyntheticWheelEvent-test.js @@ -46,11 +46,11 @@ describe('SyntheticWheelEvent', function() { it('should normalize properties from the WheelEvent interface', function() { var standardEvent = createEvent({deltaX: 10, deltaY: -50}); expect(standardEvent.deltaX).toBe(10); - expect(standardEvent.deltaY).toBe(50); + expect(standardEvent.deltaY).toBe(-50); var webkitEvent = createEvent({wheelDeltaX: -10, wheelDeltaY: 50}); expect(webkitEvent.deltaX).toBe(10); - expect(webkitEvent.deltaY).toBe(50); + expect(webkitEvent.deltaY).toBe(-50); }); it('should be able to `preventDefault` and `stopPropagation`', function() {