Spaces:
Running
Running
| // Shared JavaScript across all pages | |
| console.log('Eventful Days App loaded'); | |
| // Smooth scrolling for anchor links | |
| document.querySelectorAll('a[href^="#"]').forEach(anchor => { | |
| anchor.addEventListener('click', function (e) { | |
| e.preventDefault(); | |
| const target = document.querySelector(this.getAttribute('href')); | |
| if (target) { | |
| window.scrollTo({ | |
| top: target.offsetTop - 80, | |
| behavior: 'smooth' | |
| }); | |
| } | |
| }); | |
| }); | |
| // Navbar scroll effect | |
| window.addEventListener('scroll', function() { | |
| const navbar = document.querySelector('custom-navbar'); | |
| if (window.scrollY > 50) { | |
| navbar.classList.add('scrolled'); | |
| } else { | |
| navbar.classList.remove('scrolled'); | |
| } | |
| }); | |
| // Form validation example | |
| function validateForm(form) { | |
| let isValid = true; | |
| // Example validation for required fields | |
| form.querySelectorAll('[required]').forEach(field => { | |
| if (!field.value.trim()) { | |
| isValid = false; | |
| field.classList.add('border-red-500'); | |
| } else { | |
| field.classList.remove('border-red-500'); | |
| } | |
| }); | |
| return isValid; | |
| } | |
| // Toggle mobile menu | |
| function toggleMobileMenu() { | |
| const menu = document.getElementById('mobile-menu'); | |
| menu.classList.toggle('hidden'); | |
| } | |
| // Initialize tooltips (if using) | |
| function initTooltips() { | |
| const tooltips = document.querySelectorAll('[data-tooltip]'); | |
| tooltips.forEach(tooltip => { | |
| tooltip.addEventListener('mouseenter', function() { | |
| const tooltipText = this.getAttribute('data-tooltip'); | |
| // Implementation for showing tooltip | |
| }); | |
| }); | |
| } | |
| // Document ready equivalent | |
| document.addEventListener('DOMContentLoaded', function() { | |
| console.log('DOM fully loaded'); | |
| initTooltips(); | |
| }); |