DistroHopper/website-source/main.js
2026-04-19 16:26:16 +02:00

98 lines
3.5 KiB
JavaScript

// ========================================
// Mobile Navigation Toggle
// ========================================
document.addEventListener('DOMContentLoaded', function() {
const navToggle = document.querySelector('.nav-toggle');
const navMenu = document.querySelector('.nav-menu');
if (navToggle) {
navToggle.addEventListener('click', function() {
navMenu.classList.toggle('active');
// Animate hamburger icon
const spans = this.querySelectorAll('span');
if (navMenu.classList.contains('active')) {
spans[0].style.transform = 'rotate(45deg) translate(6px, 6px)';
spans[1].style.opacity = '0';
spans[2].style.transform = 'rotate(-45deg) translate(6px, -6px)';
} else {
spans[0].style.transform = 'none';
spans[1].style.opacity = '1';
spans[2].style.transform = 'none';
}
});
// Close menu when clicking on a link
const navLinks = document.querySelectorAll('.nav-menu a');
navLinks.forEach(link => {
link.addEventListener('click', () => {
navMenu.classList.remove('active');
const spans = navToggle.querySelectorAll('span');
spans[0].style.transform = 'none';
spans[1].style.opacity = '1';
spans[2].style.transform = 'none';
});
});
}
// Initialize theme
initTheme();
});
// ========================================
// Theme Toggle
// ========================================
function initTheme() {
// Check for saved theme preference or default to 'dark' mode
const currentTheme = localStorage.getItem('theme') || 'dark';
document.documentElement.setAttribute('data-theme', currentTheme);
updateThemeIcon(currentTheme);
// Add click listener to theme toggle button
const themeToggle = document.querySelector('.theme-toggle');
if (themeToggle) {
themeToggle.addEventListener('click', toggleTheme);
}
}
function toggleTheme() {
const currentTheme = document.documentElement.getAttribute('data-theme');
const newTheme = currentTheme === 'light' ? 'dark' : 'light';
document.documentElement.setAttribute('data-theme', newTheme);
localStorage.setItem('theme', newTheme);
updateThemeIcon(newTheme);
}
function updateThemeIcon(theme) {
const lightIcon = document.querySelector('.theme-toggle .light-icon');
const darkIcon = document.querySelector('.theme-toggle .dark-icon');
if (lightIcon && darkIcon) {
if (theme === 'dark') {
// When dark theme is active, show sun icon (to switch TO light)
lightIcon.classList.add('active');
darkIcon.classList.remove('active');
} else {
// When light theme is active, show moon icon (to switch TO dark)
lightIcon.classList.remove('active');
darkIcon.classList.add('active');
}
}
}
// ========================================
// Smooth Scroll
// ========================================
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});