Spaces:
Running
Running
export function updateBackground(): void { | |
const hour = new Date().getHours(); | |
const background = document.getElementById('bg') as HTMLElement | null; | |
if (!background) { | |
console.warn("Background element not found, will retry later."); | |
setTimeout(updateBackground, 500); // Retry after a delay | |
return; | |
} | |
let color1, color2, color3, color4; // Colors for the radial gradients and background | |
let cloudStyle = ''; // Additional style for cloud effects | |
if (hour >= 5 && hour < 7) { | |
// Dawn | |
color1 = 'rgba(255, 140, 0, 0.6)'; // Dark orange (sunrise) | |
color2 = 'rgba(135, 206, 250, 0.6)'; // Sky blue (light sky) | |
color3 = '#F0E68C'; // Light khaki (morning light) | |
} else if (hour >= 7 && hour < 16) { | |
// Daylight | |
color1 = 'rgba(135, 206, 250, 0.6)'; // Light sky blue (high sky) | |
color2 = 'rgba(255, 255, 255, 0.6)'; // White (sun) | |
color3 = '#87CEEB'; // Sky blue (clear day) | |
cloudStyle = ', radial-gradient(circle at 10% 30%, rgba(255, 255, 255, 0.8), transparent 80%), radial-gradient(circle at 90% 40%, rgba(255, 255, 255, 0.8), transparent 80%)'; | |
} else if (hour >= 16 && hour < 20) { | |
// Dusk | |
color1 = 'rgba(250, 128, 114, 0.6)'; // Salmon (sunset) | |
color2 = 'rgba(100, 149, 237, 0.6)'; // Cornflower blue (evening sky) | |
color3 = '#B0C4DE'; // Light steel blue (twilight) | |
} else { | |
// Night | |
color1 = 'rgba(0, 0, 0, 1)'; // Pure black | |
color2 = 'rgba(0, 0, 0, 1)'; // Pure black | |
color3 = '#000000'; // Pure black | |
} | |
// Define color4 for the pseudo-elements | |
if (hour >= 6 && hour < 18) { | |
// Daytime: lighter color for a subtle effect | |
color4 = 'rgba(255, 255, 255, 0.2)'; | |
} else { | |
// Nighttime: darker color for a stronger effect | |
color4 = 'rgba(0, 0, 0, 0.1)'; | |
} | |
// Set the background image, color, and cloud effect | |
background.style.backgroundImage = | |
`radial-gradient(circle at 50% 20%, ${color1}, transparent 90%), | |
radial-gradient(circle at 50% 80%, ${color2}, transparent 90%)${cloudStyle}`; | |
background.style.backgroundColor = color3; | |
// Cloud animation | |
if (cloudStyle) { | |
background.style.animation = 'moveClouds 60s linear infinite'; | |
} else { | |
background.style.animation = 'none'; | |
} | |
// Set the styles for the pseudo-elements | |
const beforeElement: any = document.querySelector('.background::before'); | |
const afterElement: any = document.querySelector('.background::after'); | |
if (beforeElement && afterElement) { | |
beforeElement.style.backgroundImage = `radial-gradient(closest-side, ${color4}, transparent)`; | |
afterElement.style.backgroundImage = `radial-gradient(closest-side, ${color4}, transparent)`; | |
} | |
} |