import { cubicAt, cubicRootAt } from '../core/curve';
|
import { trim } from '../core/util';
|
|
const regexp = /cubic-bezier\(([0-9,\.e ]+)\)/;
|
|
export function createCubicEasingFunc(cubicEasingStr: string) {
|
const cubic = cubicEasingStr && regexp.exec(cubicEasingStr);
|
if (cubic) {
|
const points = cubic[1].split(',');
|
const a = +trim(points[0]);
|
const b = +trim(points[1]);
|
const c = +trim(points[2]);
|
const d = +trim(points[3]);
|
|
if (isNaN(a + b + c + d)) {
|
return;
|
}
|
|
const roots: number[] = [];
|
return (p: number) => {
|
return p <= 0
|
? 0 : p >= 1
|
? 1
|
: cubicRootAt(0, a, c, 1, p, roots) && cubicAt(0, b, d, 1, roots[0]);
|
};
|
}
|
}
|