From 471b4af2c8a407c897bbd954b040af297efb10b6 Mon Sep 17 00:00:00 2001 From: Andreas Svensson Date: Mon, 29 Sep 2014 16:59:43 +0200 Subject: [PATCH] Disable ViewportMetrics unless MouseEvent lacks support for pageX/pageY --- src/renderers/dom/client/ReactBrowserEventEmitter.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/renderers/dom/client/ReactBrowserEventEmitter.js b/src/renderers/dom/client/ReactBrowserEventEmitter.js index 7f203aace9c6c..00cc48902497a 100644 --- a/src/renderers/dom/client/ReactBrowserEventEmitter.js +++ b/src/renderers/dom/client/ReactBrowserEventEmitter.js @@ -74,6 +74,7 @@ var isEventSupported = require('isEventSupported'); * React Core . General Purpose Event Plugin System */ +var hasEventPageXY; var alreadyListeningTo = {}; var isMonitoringScrollValue = false; var reactTopListenersCounter = 0; @@ -345,12 +346,19 @@ var ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, { * Listens to window scroll and resize events. We cache scroll values so that * application code can access them without triggering reflows. * + * ViewportMetrics is only used by SyntheticMouse/TouchEvent and only when + * pageX/pageY isn't supported (legacy browsers). + * * NOTE: Scroll events do not bubble. * * @see http://www.quirksmode.org/dom/events/scroll.html */ - ensureScrollValueMonitoring: function() { - if (!isMonitoringScrollValue) { + ensureScrollValueMonitoring: function(){ + if (hasEventPageXY === undefined) { + hasEventPageXY = + document.createEvent && 'pageX' in document.createEvent('MouseEvent'); + } + if (!hasEventPageXY && !isMonitoringScrollValue) { var refresh = ViewportMetrics.refreshScrollValues; ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh); isMonitoringScrollValue = true;