@enact/ui
Version:
A collection of simplified unstyled cross-platform UI components for Enact
47 lines (46 loc) • 1.2 kB
JavaScript
;
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;