| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- const toggleButton = document.getElementById('theme-toggle');
- const themeIcon = document.getElementById('theme-icon');
- const themeSound = document.getElementById('theme-sound');
- // Function to update the theme icon based on the current theme
- const updateThemeIcon = (isDarkMode) => {
- const themeMode = isDarkMode ? 'darkMode' : 'lightMode';
- const iconPath = themeIcon.querySelector('use').getAttribute('href').replace(/#.*$/, `#${themeMode}`);
- themeIcon.querySelector('use').setAttribute('href', iconPath);
- };
- // Function to update the theme based on the current mode
- const updateTheme = (isDarkMode) => {
- const theme = isDarkMode ? 'dark' : 'light';
- document.documentElement.setAttribute('data-theme', theme);
- updateThemeIcon(isDarkMode);
- };
- // Function to toggle the theme
- const toggleTheme = () => {
- const isDarkMode = toggleButton.checked;
- updateTheme(isDarkMode);
- themeSound.play();
- localStorage.setItem('theme', isDarkMode ? 'dark' : 'light');
- // Add transition class to body for smooth transition
- document.body.classList.add('theme-transition');
- setTimeout(() => {
- document.body.classList.remove('theme-transition');
- }, 300);
- };
- // Event listener for theme toggle
- toggleButton.addEventListener('change', toggleTheme);
- // Function to initialize the theme based on the stored preference
- const initializeTheme = () => {
- const storedTheme = localStorage.getItem('theme');
- const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
- const isDarkMode = storedTheme === 'dark' || (!storedTheme && prefersDark);
- toggleButton.checked = isDarkMode;
- updateTheme(isDarkMode);
- };
- // Initialize the theme
- initializeTheme();
- // Listen for changes in system preference
- window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', initializeTheme);
|