Files
site-1d37d/script.js
T
2026-09-02 20:09:49 +00:00

207 lines
6.0 KiB
JavaScript

(function() {
'use strict';
// Navigation toggle
const navToggle = document.querySelector('.nav-toggle');
const navLinks = document.querySelector('.nav-links');
if (navToggle && navLinks) {
navToggle.addEventListener('click', () => {
const isOpen = navToggle.getAttribute('aria-expanded') === 'true';
navToggle.setAttribute('aria-expanded', !isOpen);
navLinks.classList.toggle('open');
document.body.style.overflow = isOpen ? '' : 'hidden';
});
// Close menu when clicking a link
navLinks.querySelectorAll('a').forEach(link => {
link.addEventListener('click', () => {
navToggle.setAttribute('aria-expanded', 'false');
navLinks.classList.remove('open');
document.body.style.overflow = '';
});
});
// Close on escape key
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape' && navLinks.classList.contains('open')) {
navToggle.setAttribute('aria-expanded', 'false');
navLinks.classList.remove('open');
document.body.style.overflow = '';
navToggle.focus();
}
});
}
// Reveal animations
const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
if (!prefersReducedMotion) {
const revealElements = document.querySelectorAll('.reveal');
const revealObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
revealObserver.unobserve(entry.target);
}
});
}, {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
});
revealElements.forEach(el => revealObserver.observe(el));
} else {
document.querySelectorAll('.reveal').forEach(el => {
el.classList.add('visible');
});
}
// Stats counter animation
const stats = document.querySelectorAll('.stat-number');
if (!prefersReducedMotion && stats.length) {
const statsObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const target = parseInt(entry.target.getAttribute('data-target'), 10);
animateCounter(entry.target, target);
statsObserver.unobserve(entry.target);
}
});
}, { threshold: 0.5 });
stats.forEach(stat => statsObserver.observe(stat));
} else {
stats.forEach(stat => {
stat.textContent = stat.getAttribute('data-target');
});
}
function animateCounter(element, target) {
let current = 0;
const duration = 2000;
const step = target / (duration / 16);
function update() {
current += step;
if (current < target) {
element.textContent = Math.floor(current);
requestAnimationFrame(update);
} else {
element.textContent = target;
}
}
requestAnimationFrame(update);
}
// Set minimum date for booking form
const dateInput = document.getElementById('booking-date');
if (dateInput) {
const today = new Date();
const tomorrow = new Date(today);
tomorrow.setDate(tomorrow.getDate() + 1);
const minDate = tomorrow.toISOString().split('T')[0];
dateInput.setAttribute('min', minDate);
}
// Form handling
const bookingForm = document.getElementById('bookingForm');
const contactForm = document.getElementById('contactForm');
function showToast(message) {
const toast = document.getElementById('toast');
if (toast) {
toast.textContent = message;
toast.classList.add('show');
setTimeout(() => {
toast.classList.remove('show');
}, 4000);
}
}
function validatePhone(phone) {
const cleaned = phone.replace(/[-\s]/g, '');
return /^0[0-9]{9}$/.test(cleaned);
}
if (bookingForm) {
bookingForm.addEventListener('submit', (e) => {
e.preventDefault();
const phone = bookingForm.querySelector('[name="phone"]').value;
if (!validatePhone(phone)) {
showToast('מספר הטלפון לא תקין. נא להזין מספר ישראלי.');
return;
}
const formData = new FormData(bookingForm);
const data = Object.fromEntries(formData);
// Simulate form submission
console.log('Booking request:', data);
showToast('הבקשה נשלחה בהצלחה! נחזור אליך תוך 24 שעות.');
bookingForm.reset();
});
}
if (contactForm) {
contactForm.addEventListener('submit', (e) => {
e.preventDefault();
const phone = contactForm.querySelector('[name="phone"]').value;
if (!validatePhone(phone)) {
showToast('מספר הטלפון לא תקין. נא להזין מספר ישראלי.');
return;
}
const formData = new FormData(contactForm);
const data = Object.fromEntries(formData);
// Simulate form submission
console.log('Contact message:', data);
showToast('ההודעה נשלחה! נחזור אליך בהקדם.');
contactForm.reset();
});
}
// Smooth scroll for anchor links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function(e) {
const targetId = this.getAttribute('href');
if (targetId === '#') return;
const target = document.querySelector(targetId);
if (target) {
e.preventDefault();
const nav = document.querySelector('.main-nav');
const navHeight = nav ? nav.offsetHeight : 0;
const targetPosition = target.getBoundingClientRect().top + window.pageYOffset - navHeight;
window.scrollTo({
top: targetPosition,
behavior: prefersReducedMotion ? 'auto' : 'smooth'
});
}
});
});
// Nav shadow on scroll
const nav = document.querySelector('.main-nav');
if (nav) {
window.addEventListener('scroll', () => {
if (window.pageYOffset > 100) {
nav.style.boxShadow = 'var(--shadow-sm)';
} else {
nav.style.boxShadow = 'none';
}
}, { passive: true });
}
})();