Files
ITStudioMainSite/assets/js/theme-toggle.js
T

48 lines
1.3 KiB
JavaScript

const themeToggle = document.querySelector('.theme-toggle');
const html = document.documentElement;
function updateLogoColor(theme) {
const logoText = document.querySelector('#logo-text-cn');
if (logoText) {
logoText.setAttribute('fill', theme === 'dark' ? '#ffffff' : '#000000');
}
}
function getPreferredTheme() {
const savedTheme = localStorage.getItem('theme');
if (savedTheme) {
return savedTheme;
}
const systemPreference = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
return systemPreference;
}
function setTheme(theme) {
html.setAttribute('data-theme', theme);
localStorage.setItem('theme', theme);
updateLogoColor(theme);
}
const initialTheme = getPreferredTheme();
setTheme(initialTheme);
if (themeToggle) {
themeToggle.addEventListener('click', () => {
const currentTheme = html.getAttribute('data-theme');
const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
setTheme(newTheme);
});
}
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
if (!localStorage.getItem('theme')) {
const newTheme = e.matches ? 'dark' : 'light';
setTheme(newTheme);
}
});
window.addEventListener('load', () => {
updateLogoColor(html.getAttribute('data-theme') || getPreferredTheme());
});