123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- /**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * This is utility that hanlds onWheel events and calls provided wheel
- * callback with correct frame rate.
- *
- * @typechecks
- */
- 'use strict';
- var emptyFunction = require("./emptyFunction");
- var normalizeWheel = require("./normalizeWheel");
- var requestAnimationFramePolyfill = require("./requestAnimationFramePolyfill");
- var ReactWheelHandler =
- /*#__PURE__*/
- function () {
- /**
- * onWheel is the callback that will be called with right frame rate if
- * any wheel events happened
- * onWheel should is to be called with two arguments: deltaX and deltaY in
- * this order
- */
- function ReactWheelHandler(
- /*function*/
- onWheel,
- /*boolean|function*/
- handleScrollX,
- /*boolean|function*/
- handleScrollY,
- /*?boolean|?function*/
- stopPropagation) {
- this._animationFrameID = null;
- this._deltaX = 0;
- this._deltaY = 0;
- this._didWheel = this._didWheel.bind(this);
- if (typeof handleScrollX !== 'function') {
- handleScrollX = handleScrollX ? emptyFunction.thatReturnsTrue : emptyFunction.thatReturnsFalse;
- }
- if (typeof handleScrollY !== 'function') {
- handleScrollY = handleScrollY ? emptyFunction.thatReturnsTrue : emptyFunction.thatReturnsFalse;
- }
- if (typeof stopPropagation !== 'function') {
- stopPropagation = stopPropagation ? emptyFunction.thatReturnsTrue : emptyFunction.thatReturnsFalse;
- }
- this._handleScrollX = handleScrollX;
- this._handleScrollY = handleScrollY;
- this._stopPropagation = stopPropagation;
- this._onWheelCallback = onWheel;
- this.onWheel = this.onWheel.bind(this);
- }
- var _proto = ReactWheelHandler.prototype;
- _proto.onWheel = function onWheel(
- /*object*/
- event) {
- var normalizedEvent = normalizeWheel(event);
- var deltaX = this._deltaX + normalizedEvent.pixelX;
- var deltaY = this._deltaY + normalizedEvent.pixelY;
- var handleScrollX = this._handleScrollX(deltaX, deltaY);
- var handleScrollY = this._handleScrollY(deltaY, deltaX);
- if (!handleScrollX && !handleScrollY) {
- return;
- }
- this._deltaX += handleScrollX ? normalizedEvent.pixelX : 0;
- this._deltaY += handleScrollY ? normalizedEvent.pixelY : 0;
- event.preventDefault();
- var changed;
- if (this._deltaX !== 0 || this._deltaY !== 0) {
- if (this._stopPropagation()) {
- event.stopPropagation();
- }
- changed = true;
- }
- if (changed === true && this._animationFrameID === null) {
- this._animationFrameID = requestAnimationFramePolyfill(this._didWheel);
- }
- };
- _proto._didWheel = function _didWheel() {
- this._animationFrameID = null;
- this._onWheelCallback(this._deltaX, this._deltaY);
- this._deltaX = 0;
- this._deltaY = 0;
- };
- return ReactWheelHandler;
- }();
- module.exports = ReactWheelHandler;
|