33 lines
1.2 KiB
Plaintext
33 lines
1.2 KiB
Plaintext
|
/**
|
||
|
* Copyright (c) 2013-present, Facebook, Inc.
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* This source code is licensed under the BSD-style license found in the
|
||
|
* LICENSE file in the root directory of this source tree. An additional grant
|
||
|
* of patent rights can be found in the PATENTS file in the same directory.
|
||
|
*
|
||
|
* @providesModule TouchEventUtils
|
||
|
*/
|
||
|
|
||
|
const TouchEventUtils = {
|
||
|
/**
|
||
|
* Utility function for common case of extracting out the primary touch from a
|
||
|
* touch event.
|
||
|
* - `touchEnd` events usually do not have the `touches` property.
|
||
|
* http://stackoverflow.com/questions/3666929/
|
||
|
* mobile-sarai-touchend-event-not-firing-when-last-touch-is-removed
|
||
|
*
|
||
|
* @param {Event} nativeEvent Native event that may or may not be a touch.
|
||
|
* @return {TouchesObject?} an object with pageX and pageY or null.
|
||
|
*/
|
||
|
extractSingleTouch: function (nativeEvent) {
|
||
|
const touches = nativeEvent.touches;
|
||
|
const changedTouches = nativeEvent.changedTouches;
|
||
|
const hasTouches = touches && touches.length > 0;
|
||
|
const hasChangedTouches = changedTouches && changedTouches.length > 0;
|
||
|
|
||
|
return !hasTouches && hasChangedTouches ? changedTouches[0] : hasTouches ? touches[0] : nativeEvent;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
module.exports = TouchEventUtils;
|