@egjs/axes
Version:
A module used to change the information of user action entered by various input devices such as touch screen or mouse into the logical virtual coordinates. You can easily create a UI that responds to user actions.
234 lines • 7.08 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import { window } from "./browser";
import { PREVENT_DRAG_CSSPROPS } from "./const";
import { DIRECTION_NONE, DIRECTION_VERTICAL, DIRECTION_HORIZONTAL, DIRECTION_ALL, } from "./const";
export var toArray = function (nodes) {
var el = [];
for (var i = 0, len = nodes.length; i < len; i++) {
el.push(nodes[i]);
}
return el;
};
export var $ = function (param, multi) {
if (multi === void 0) { multi = false; }
var el;
if (typeof param === "string") {
var match = param.match(/^<([a-z]+)\s*([^>]*)>/);
if (match) {
var dummy = document.createElement("div");
dummy.innerHTML = param;
el = toArray(dummy.childNodes);
}
else {
el = toArray(document.querySelectorAll(param));
}
if (!multi) {
el = el.length >= 1 ? el[0] : undefined;
}
}
else if (param === window) {
el = param;
}
else if ("value" in param || "current" in param) {
el = param.value || param.current;
}
else if (param.nodeName && (param.nodeType === 1 || param.nodeType === 9)) {
el = param;
}
else if (("jQuery" in window && param instanceof jQuery) ||
param.constructor.prototype.jquery) {
el = multi ? param.toArray() : param.get(0);
}
else if (Array.isArray(param)) {
el = param.map(function (v) { return $(v); });
if (!multi) {
el = el.length >= 1 ? el[0] : undefined;
}
}
return el;
};
var raf = window.requestAnimationFrame || window.webkitRequestAnimationFrame;
var caf = window.cancelAnimationFrame || window.webkitCancelAnimationFrame;
if (raf && !caf) {
var keyInfo_1 = {};
var oldraf_1 = raf;
raf = function (callback) {
var wrapCallback = function (timestamp) {
if (keyInfo_1[key]) {
callback(timestamp);
}
};
var key = oldraf_1(wrapCallback);
keyInfo_1[key] = true;
return key;
};
caf = function (key) {
delete keyInfo_1[key];
};
}
else if (!(raf && caf)) {
raf = function (callback) {
return window.setTimeout(function () {
callback((window.performance &&
window.performance.now &&
window.performance.now()) || new Date().getTime());
}, 16);
};
caf = window.clearTimeout;
}
export var requestAnimationFrame = function (fp) {
return raf(fp);
};
export var cancelAnimationFrame = function (key) {
caf(key);
};
export var map = function (obj, callback) {
var tranformed = {};
for (var k in obj) {
if (k) {
tranformed[k] = callback(obj[k], k);
}
}
return tranformed;
};
export var filter = function (obj, callback) {
var filtered = {};
for (var k in obj) {
if (k && callback(obj[k], k)) {
filtered[k] = obj[k];
}
}
return filtered;
};
export var every = function (obj, callback) {
for (var k in obj) {
if (k && !callback(obj[k], k)) {
return false;
}
}
return true;
};
export var equal = function (target, base) {
return every(target, function (v, k) { return v === base[k]; });
};
var roundNumFunc = {};
export var roundNumber = function (num, roundUnit) {
if (!roundNumFunc[roundUnit]) {
roundNumFunc[roundUnit] = getRoundFunc(roundUnit);
}
return roundNumFunc[roundUnit](num);
};
export var roundNumbers = function (num, roundUnit) {
if (!num || !roundUnit) {
return num;
}
return map(num, function (value, key) {
return roundNumber(value, typeof roundUnit === "number" ? roundUnit : roundUnit[key]);
});
};
export var getDecimalPlace = function (val) {
if (!isFinite(val)) {
return 0;
}
var v = "".concat(val);
if (v.indexOf("e") >= 0) {
var p = 0;
var e = 1;
while (Math.round(val * e) / e !== val) {
e *= 10;
p++;
}
return p;
}
return v.indexOf(".") >= 0 ? v.length - v.indexOf(".") - 1 : 0;
};
export var inversePow = function (n) {
return 1 / Math.pow(10, n);
};
export var getRoundFunc = function (v) {
var p = v < 1 ? Math.pow(10, getDecimalPlace(v)) : 1;
return function (n) {
if (v === 0) {
return 0;
}
return Math.round(Math.round(n / v) * v * p) / p;
};
};
export var getAngle = function (posX, posY) {
return (Math.atan2(posY, posX) * 180) / Math.PI;
};
export var isCssPropsFromAxes = function (originalCssProps) {
var same = true;
Object.keys(PREVENT_DRAG_CSSPROPS).forEach(function (prop) {
if (!originalCssProps ||
originalCssProps[prop] !== PREVENT_DRAG_CSSPROPS[prop]) {
same = false;
}
});
return same;
};
export var getDirection = function (useHorizontal, useVertical) {
if (useHorizontal && useVertical) {
return DIRECTION_ALL;
}
else if (useHorizontal) {
return DIRECTION_HORIZONTAL;
}
else if (useVertical) {
return DIRECTION_VERTICAL;
}
else {
return DIRECTION_NONE;
}
};
export var useDirection = function (checkType, direction, userDirection) {
if (userDirection) {
return !!(direction === DIRECTION_ALL ||
(direction & checkType && userDirection & checkType));
}
else {
return !!(direction & checkType);
}
};
export var setCssProps = function (element, option, direction) {
var _a;
var touchActionMap = (_a = {},
_a[DIRECTION_NONE] = "auto",
_a[DIRECTION_ALL] = "none",
_a[DIRECTION_VERTICAL] = "pan-x",
_a[DIRECTION_HORIZONTAL] = "pan-y",
_a);
var oldCssProps = {};
if (element && element.style) {
var touchAction = option.touchAction
? option.touchAction
: touchActionMap[direction];
var newCssProps_1 = __assign(__assign({}, PREVENT_DRAG_CSSPROPS), { "touch-action": element.style["touch-action"] === "none" ? "none" : touchAction });
Object.keys(newCssProps_1).forEach(function (prop) {
oldCssProps[prop] = element.style[prop];
});
Object.keys(newCssProps_1).forEach(function (prop) {
element.style[prop] = newCssProps_1[prop];
});
}
return oldCssProps;
};
export var revertCssProps = function (element, originalCssProps) {
if (element && element.style && originalCssProps) {
Object.keys(originalCssProps).forEach(function (prop) {
element.style[prop] = originalCssProps[prop];
});
}
return;
};
//# sourceMappingURL=utils.js.map