@gdjiami/hooks
Version:
react hooks for mygzb.com
96 lines (82 loc) • 2.1 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
export var TOUCH_SUPPROTED = 'TouchEvent' in window;
export var GestureCoordinateKeys = ['clientX', 'clientY', 'pageX', 'pageY', 'screenX', 'screenY'];
export function isMouseEvent(evt) {
if (evt.type.startsWith('mouse')) {
return true;
}
return false;
}
export function pickProperties(obj, keys) {
var newobj = {};
for (var _iterator = keys, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
var _ref;
if (_isArray) {
if (_i >= _iterator.length) break;
_ref = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) break;
_ref = _i.value;
}
var key = _ref;
newobj[key] = obj[key];
}
return newobj;
}
/**
* 获取MouseEvent或TouchEvent中的坐标
* @param evt
*/
export function extraPosition(evt, id) {
if (isMouseEvent(evt)) {
return pickProperties(evt, GestureCoordinateKeys);
}
var touch;
if (id) {
for (var i = 0; i < evt.touches.length; i++) {
if (evt.touches[i].identifier === id) {
touch = evt.touches[i];
break;
}
}
if (touch == null) {
return;
}
} else {
touch = evt.targetTouches[0];
}
return _extends({}, pickProperties(touch, GestureCoordinateKeys), {
id: touch.identifier
});
}
/**
* 获取多点触摸
*/
export function extraPositions(evt) {
if (isMouseEvent(evt)) {
return [_extends({
id: 0
}, pickProperties(evt, GestureCoordinateKeys))];
}
return Array.prototype.map.call(evt.changedTouches, function (touch) {
return _extends({
id: touch.identifier
}, pickProperties(touch, GestureCoordinateKeys));
});
}
export function clamp(num, lower, upper) {
if (num === num) {
if (upper !== undefined) {
num = num <= upper ? num : upper;
}
if (lower !== undefined) {
num = num >= lower ? num : lower;
}
}
return num;
}
var uid = 0;
export function getUid() {
return uid = uid + 1 % (Number.MAX_SAFE_INTEGER - 1);
}