@ryanuo/utils
Version:
提供多种实用工具函数,涵盖算法、浏览器操作、网络请求等多个领域
37 lines (36 loc) • 1.3 kB
JavaScript
function hexToRgba(hex) {
if (!/^#(?:[0-9a-f]{6}|[0-9a-f]{8})$/i.test(hex))
throw new Error("Invalid hex color");
const r = Number.parseInt(hex.slice(1, 3), 16);
const g = Number.parseInt(hex.slice(3, 5), 16);
const b = Number.parseInt(hex.slice(5, 7), 16);
const a = hex.length > 7 ? Number.parseInt(hex.slice(7, 9), 16) / 255 : 1;
return { r, g, b, a };
}
function rgbaToHex({ r, g, b, a = 1 }) {
if (r < 0 || r > 255)
throw new Error("Invalid red value");
if (g < 0 || g > 255)
throw new Error("Invalid green value");
if (b < 0 || b > 255)
throw new Error("Invalid blue value");
if (a < 0 || a > 1)
throw new Error("Invalid alpha value");
const toHex = (n) => Math.round(n).toString(16).padStart(2, "0");
return `#${toHex(r)}${toHex(g)}${toHex(b)}${a < 1 ? toHex(a * 255) : ""}`;
}
function lerpColor(color1, color2, t) {
if (!/^#(?:[0-9a-f]{6}|[0-9a-f]{8})$/i.test(color1))
throw new Error("Invalid hex color");
if (t < 0 || t > 1)
throw new Error("Invalid t value");
const c1 = hexToRgba(color1);
const c2 = hexToRgba(color2);
return rgbaToHex({
r: c1.r + (c2.r - c1.r) * t,
g: c1.g + (c2.g - c1.g) * t,
b: c1.b + (c2.b - c1.b) * t,
a: c1.a + (c2.a - c1.a) * t
});
}
export { hexToRgba, rgbaToHex, lerpColor };