// Pride and Prejudice - Interactive Features document.addEventListener('DOMContentLoaded', () => { // Navigation scroll effect initNavigation(); // Quotes slider initQuotesSlider(); // Scroll reveal animations initScrollReveal(); // Smooth scroll for anchor links initSmoothScroll(); }); // ============================================ // NAVIGATION SCROLL EFFECT // ============================================ function initNavigation() { const nav = document.querySelector('.nav'); let lastScroll = 0; window.addEventListener('scroll', () => { const currentScroll = window.pageYOffset; // Add/remove scrolled class if (currentScroll > 100) { nav.classList.add('scrolled'); } else { nav.classList.remove('scrolled'); } lastScroll = currentScroll; }); } // ============================================ // QUOTES SLIDER // ============================================ function initQuotesSlider() { const quotes = document.querySelectorAll('.quote-card'); const dots = document.querySelectorAll('.quote-dot'); let currentIndex = 0; let autoSlideInterval; function showQuote(index) { // Remove active class from all quotes and dots quotes.forEach(quote => quote.classList.remove('active')); dots.forEach(dot => dot.classList.remove('active')); // Add active class to current quote and dot quotes[index].classList.add('active'); dots[index].classList.add('active'); currentIndex = index; } function nextQuote() { const nextIndex = (currentIndex + 1) % quotes.length; showQuote(nextIndex); } // Dot click handlers dots.forEach((dot, index) => { dot.addEventListener('click', () => { showQuote(index); resetAutoSlide(); }); }); // Auto-slide functionality function startAutoSlide() { autoSlideInterval = setInterval(nextQuote, 6000); } function resetAutoSlide() { clearInterval(autoSlideInterval); startAutoSlide(); } // Start auto-slide startAutoSlide(); // Pause on hover const slider = document.querySelector('.quotes-slider'); slider.addEventListener('mouseenter', () => clearInterval(autoSlideInterval)); slider.addEventListener('mouseleave', startAutoSlide); } // ============================================ // SCROLL REVEAL ANIMATIONS // ============================================ function initScrollReveal() { const revealElements = document.querySelectorAll( '.about-content, .character-card, .theme-item, .section-header' ); const revealOptions = { threshold: 0.15, rootMargin: '0px 0px -50px 0px' }; const revealObserver = new IntersectionObserver((entries) => { entries.forEach((entry, index) => { if (entry.isIntersecting) { // Add staggered delay for grid items const delay = entry.target.classList.contains('character-card') || entry.target.classList.contains('theme-item') ? index * 100 : 0; setTimeout(() => { entry.target.classList.add('reveal'); entry.target.style.opacity = '1'; entry.target.style.transform = 'translateY(0)'; }, delay); revealObserver.unobserve(entry.target); } }); }, revealOptions); revealElements.forEach(el => { el.style.opacity = '0'; el.style.transform = 'translateY(30px)'; el.style.transition = 'opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1), transform 0.8s cubic-bezier(0.16, 1, 0.3, 1)'; revealObserver.observe(el); }); } // ============================================ // SMOOTH SCROLL FOR ANCHOR LINKS // ============================================ function initSmoothScroll() { document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function(e) { e.preventDefault(); const target = document.querySelector(this.getAttribute('href')); if (target) { const navHeight = document.querySelector('.nav').offsetHeight; const targetPosition = target.getBoundingClientRect().top + window.pageYOffset - navHeight; window.scrollTo({ top: targetPosition, behavior: 'smooth' }); } }); }); } // ============================================ // PARALLAX EFFECT FOR HERO // ============================================ window.addEventListener('scroll', () => { const scrolled = window.pageYOffset; const heroPattern = document.querySelector('.hero-pattern'); if (heroPattern && scrolled < window.innerHeight) { heroPattern.style.transform = `translateY(${scrolled * 0.3}px) rotate(${scrolled * 0.02}deg)`; } }); // ============================================ // CHARACTER CARD HOVER EFFECT // ============================================ document.querySelectorAll('.character-card').forEach(card => { card.addEventListener('mouseenter', function() { this.style.zIndex = '10'; }); card.addEventListener('mouseleave', function() { this.style.zIndex = '1'; }); });