@orca-fe/tools
Version:
front-end tools
63 lines (61 loc) • 1.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.by = by;
exports.ceilBy = void 0;
exports.clamp = clamp;
exports.decimalLength = decimalLength;
exports.floorBy = void 0;
exports.mix = mix;
exports.roundBy = void 0;
exports.toFixedNumber = toFixedNumber;
function toFixedNumber(num, fractionDigits) {
if (!Number.isNaN(Number(num))) {
return Number(Number(num).toFixed(fractionDigits));
}
return num;
}
function decimalLength(value) {
var str = String(value);
var pointPosition = str.indexOf('.');
if (pointPosition < 0) return 0;
return str.length - pointPosition - 1;
}
function by(fn) {
return function (divisor) {
var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var decimalLen = decimalLength(divisor);
return function (num) {
return toFixedNumber(fn((num + offset) / divisor) * divisor - offset, decimalLen);
};
};
}
var roundBy = exports.roundBy = by(Math.round);
var floorBy = exports.floorBy = by(Math.floor);
var ceilBy = exports.ceilBy = by(Math.ceil);
/**
* 把一个值限制在一个上限和下限之间
* @param _num 当前数字
* @param lower 最小值
* @param upper 最大值
*/
function clamp(_num, lower, upper) {
var num = _num;
// eslint-disable-next-line no-self-compare
if (num === num) {
if (upper !== undefined) {
// 如果上限制大于number,则number的值不变,反之,number赋值upper的值
num = num <= upper ? num : upper;
}
if (lower !== undefined) {
// 同样的,如果下限值小于number,则number值不变,防止,number赋值lower的值
num = num >= lower ? num : lower;
}
}
return num;
}
function mix(x, y, _a) {
var a = clamp(_a, 0, 1);
return x * (1 - a) + y * a;
}