// Mobile menu toggle functionality document.addEventListener('DOMContentLoaded', function() { const hamburger = document.getElementById('hamburger'); const navMobile = document.getElementById('navMobile'); // Add header scroll effect const header = document.querySelector('.header'); // Smooth scrolling for anchor links document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function(e) { const targetId = this.getAttribute('href'); if (targetId === '#' || !document.querySelector(targetId)) return; e.preventDefault(); // Close mobile menu if open if (hamburger && navMobile) { hamburger.classList.remove('active'); navMobile.classList.remove('active'); document.body.style.overflow = ''; } // Smooth scroll to target const targetElement = document.querySelector(targetId); if (targetElement) { window.scrollTo({ top: targetElement.offsetTop - 80, // Account for fixed header behavior: 'smooth' }); } }); }); // Header scroll effect if (header) { window.addEventListener('scroll', () => { if (window.scrollY > 50) { header.classList.add('scrolled'); } else { header.classList.remove('scrolled'); } }); // Initialize header state if (window.scrollY > 50) { header.classList.add('scrolled'); } } // Mobile menu toggle if (hamburger && navMobile) { hamburger.addEventListener('click', function(e) { e.stopPropagation(); this.classList.toggle('active'); navMobile.classList.toggle('active'); document.body.style.overflow = navMobile.classList.contains('active') ? 'hidden' : ''; }); // Close mobile menu when clicking on a link const mobileLinks = document.querySelectorAll('.nav-mobile-links a'); mobileLinks.forEach(link => { link.addEventListener('click', () => { hamburger.classList.remove('active'); navMobile.classList.remove('active'); document.body.style.overflow = ''; }); }); // Close mobile menu when clicking outside document.addEventListener('click', (e) => { if (!hamburger.contains(e.target) && !navMobile.contains(e.target)) { hamburger.classList.remove('active'); navMobile.classList.remove('active'); document.body.style.overflow = ''; } }); } // Initialize Intersection Observer for fade-in animations const fadeElements = document.querySelectorAll('.fade-in'); const observerOptions = { threshold: 0.1, rootMargin: '0px 0px -50px 0px' }; const observer = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('visible'); observer.unobserve(entry.target); } }); }, observerOptions); fadeElements.forEach(element => { observer.observe(element); }); // Add animation delay to credential cards const cards = document.querySelectorAll('.credential-card'); cards.forEach((card, index) => { card.style.animationDelay = `${index * 0.15}s`; }); }); // Upcoming Book Projects Slider function initProjectsSlider() { const track = document.querySelector('.projects-slider .slider-track'); const cards = Array.from(track.children); const leftArrow = document.querySelector('.projects-slider .slider-arrow.left'); const rightArrow = document.querySelector('.projects-slider .slider-arrow.right'); let currentIndex = 0; const total = cards.length; function getCardsToShow() { if (window.innerWidth >= 900) return 3; if (window.innerWidth >= 600) return 2; return 1; } function updateSlider() { const cardsToShow = getCardsToShow(); const cardWidth = cards[0].offsetWidth + 24; // card width + margin track.style.transition = 'transform 0.5s cubic-bezier(.77,0,.18,1)'; track.style.transform = `translateX(-${currentIndex * cardWidth}px)`; } leftArrow.addEventListener('click', function() { const cardsToShow = getCardsToShow(); currentIndex = (currentIndex - 1 + total) % total; updateSlider(); }); rightArrow.addEventListener('click', function() { const cardsToShow = getCardsToShow(); currentIndex = (currentIndex + 1) % total; updateSlider(); }); window.addEventListener('resize', updateSlider); updateSlider(); } document.addEventListener('DOMContentLoaded', function() { if (document.querySelector('.projects-slider')) { initProjectsSlider(); } });