color.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /**
  2. * 获取随机颜色
  3. * @param baseColor 基础颜色
  4. * @param alpha 透明度
  5. */
  6. export const getRandomColor = (baseColors: string[], alpha?: number) => {
  7. const randomIndex = Math.floor(Math.random() * baseColors.length);
  8. const randomAlpha = Math.random();
  9. alpha = alpha || randomAlpha;
  10. const r = parseInt(baseColors[randomIndex].slice(1, 3), 16);
  11. const g = parseInt(baseColors[randomIndex].slice(3, 5), 16);
  12. const b = parseInt(baseColors[randomIndex].slice(5, 7), 16);
  13. const bColor = Number((b * alpha).toFixed(0)).toString(16);
  14. // 返回hex颜色
  15. return `#${r.toString(16)}${g.toString(16)}${bColor.length < 2 ? '0' + bColor : bColor}`
  16. }
  17. /**
  18. * 改变颜色亮度
  19. * @param color 颜色
  20. * @param amount 改变值
  21. * @returns
  22. */
  23. export function lightenColor(color: string, amount: number): string {
  24. let usePound = false;
  25. if (color[0] === '#') {
  26. color = color.slice(1);
  27. usePound = true;
  28. }
  29. const num = parseInt(color, 16);
  30. let r = (num >> 16) + amount;
  31. if (r > 255) r = 255;
  32. else if (r < 0) r = 0;
  33. let b = ((num >> 8) & 0x00ff) + amount;
  34. if (b > 255) b = 255;
  35. else if (b < 0) b = 0;
  36. let g = (num & 0x0000ff) + amount;
  37. if (g > 255) g = 255;
  38. else if (g < 0) g = 0;
  39. return (usePound ? '#' : '') + (g | (b << 8) | (r << 16)).toString(16).padStart(6, '0');
  40. }