UNPKG

@enact/ui

Version:

A collection of simplified unstyled cross-platform UI components for Enact

47 lines (46 loc) 1.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.utilAnimation = exports["default"] = void 0; /* * Create a cubic-bezier easing function evaluator. */ var utilAnimation = exports.utilAnimation = function utilAnimation(x1, y1, x2, y2) { var AX = 1 + 3 * x1 - 3 * x2; var BX = 3 * x2 - 6 * x1; var CX = 3 * x1; var AY = 1 + 3 * y1 - 3 * y2; var BY = 3 * y2 - 6 * y1; var CY = 3 * y1; function sampleCurveX(t) { return ((AX * t + BX) * t + CX) * t; } function sampleCurveY(t) { return ((AY * t + BY) * t + CY) * t; } function sampleCurveDerivativeX(t) { return (3 * AX * t + 2 * BX) * t + CX; } function solveCurveX(x) { var t0 = x; var t1, t2; for (var i = 0; i < 4; ++i) { t2 = sampleCurveX(t0) - x; if (Math.abs(t2) < 0.001) return t0; t1 = sampleCurveDerivativeX(t0); if (Math.abs(t1) < 1e-6) break; t0 = t0 - t2 / t1; } return t0; } return { cubicBezier: function cubicBezier(x) { if (x === 0) return 0; if (x === 1) return 1; var t = solveCurveX(x); return sampleCurveY(t); } }; }; var _default = exports["default"] = utilAnimation;