UNPKG

@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
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