| document.addEventListener('DOMContentLoaded', function() { |
| |
| const colorSchemeToggle = document.getElementById('color-scheme-toggle'); |
| if (colorSchemeToggle) { |
| colorSchemeToggle.addEventListener('click', function() { |
| document.documentElement.classList.toggle('dark'); |
| localStorage.setItem('colorScheme', document.documentElement.classList.contains('dark') ? 'dark' : 'light'); |
| }); |
| } |
|
|
| |
| if (localStorage.getItem('colorScheme') === 'dark') { |
| document.documentElement.classList.add('dark'); |
| } |
|
|
| |
| document.querySelectorAll('a[href^="#"]').forEach(anchor => { |
| anchor.addEventListener('click', function (e) { |
| e.preventDefault(); |
| document.querySelector(this.getAttribute('href')).scrollIntoView({ |
| behavior: 'smooth' |
| }); |
| }); |
| }); |
|
|
| |
| const observer = new IntersectionObserver((entries) => { |
| entries.forEach(entry => { |
| if (entry.isIntersecting) { |
| entry.target.classList.add('animate-fadeIn'); |
| } |
| }); |
| }, { threshold: 0.1 }); |
|
|
| document.querySelectorAll('.animate-on-scroll').forEach(el => { |
| observer.observe(el); |
| }); |
| }); |