55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
/**
|
|
* 随机生成颜色代码
|
|
* @returns #f716ed
|
|
*/
|
|
export function generateColorHEX(): string {
|
|
const str = Math.floor(Math.random() * (256 * 256 * 256 - 1)).toString(16);
|
|
return `#${str}`;
|
|
}
|
|
|
|
//
|
|
/**
|
|
* 生成随机的 RGB 颜色
|
|
* @returns rgb(24 144 255) / rgba(0,0,0,.85)
|
|
*/
|
|
export function generateColorRGBA(hasAlpha: boolean = false) {
|
|
const isDark = document.documentElement.getAttribute('data-theme') === 'dark';
|
|
|
|
let red: number;
|
|
let green: number;
|
|
let blue: number;
|
|
|
|
if (isDark) {
|
|
// 暗色模式下生成较亮的颜色
|
|
red = Math.floor(Math.random() * 156) + 100; // 100-255
|
|
green = Math.floor(Math.random() * 156) + 100; // 100-255
|
|
blue = Math.floor(Math.random() * 156) + 100; // 100-255
|
|
|
|
// 确保至少有一个通道的值较高,使颜色更明亮
|
|
const brightChannel = Math.floor(Math.random() * 3);
|
|
switch (brightChannel) {
|
|
case 0:
|
|
red = Math.min(255, red + 50);
|
|
break;
|
|
case 1:
|
|
green = Math.min(255, green + 50);
|
|
break;
|
|
case 2:
|
|
blue = Math.min(255, blue + 50);
|
|
break;
|
|
}
|
|
} else {
|
|
// 亮色模式下生成正常的颜色
|
|
red = Math.floor(Math.random() * 256); // 0-255
|
|
green = Math.floor(Math.random() * 256); // 0-255
|
|
blue = Math.floor(Math.random() * 256); // 0-255
|
|
}
|
|
|
|
if (hasAlpha) {
|
|
const alpha = Math.floor(Math.random() * 100);
|
|
return `rgba(${red}, ${green}, ${blue}, 0.${alpha})`;
|
|
}
|
|
|
|
return `rgb(${red}, ${green}, ${blue})`;
|
|
}
|