Files
lahrcarpetcleaning.com/assets/js/main.js
T
Concept Agent 307e452251 backup
2026-05-15 18:02:38 +02:00

69 lines
2.5 KiB
JavaScript

const mobileToggle = document.querySelector('.mobile-menu-toggle');
const navLinks = document.querySelector('.nav-links');
const navContact = document.querySelector('.nav-contact');
mobileToggle.addEventListener('click', () => {
navLinks.classList.toggle('active');
navContact.classList.toggle('active');
mobileToggle.classList.toggle('active');
});
const dropdownLabel = document.querySelector('.dropdown-label');
const navDropdown = document.querySelector('.nav-dropdown');
if (dropdownLabel && navDropdown) {
dropdownLabel.addEventListener('click', function(e) {
if (window.innerWidth <= 768) {
e.preventDefault();
e.stopPropagation();
navDropdown.classList.toggle('open');
}
});
document.addEventListener('click', function(e) {
if (!navDropdown.contains(e.target)) {
navDropdown.classList.remove('open');
}
});
}
document.querySelectorAll('.dropdown-toggle').forEach(toggle => {
toggle.addEventListener('click', function() {
this.classList.toggle('active');
this.nextElementSibling.classList.toggle('active');
});
});
const form = document.getElementById('quoteForm');
if (form) {
form.addEventListener('submit', function(e) {
e.preventDefault();
alert('Thank you for your quote request! We will contact you shortly.');
this.reset();
});
}
// How It Works — scroll-triggered step reveal
(function () {
function initProcess() {
var track = document.querySelector('.process-track');
if (!track) return;
var steps = track.querySelectorAll('.process-step');
var observer = new IntersectionObserver(function (entries) {
entries.forEach(function (entry) {
if (entry.isIntersecting) {
track.classList.add('animated');
steps.forEach(function (step, i) {
setTimeout(function () {
step.classList.add('visible');
}, i * 220);
});
observer.disconnect();
}
});
}, { threshold: 0.25 });
observer.observe(track);
}
// components.js runs before main.js, but process section is injected synchronously
// so it's available immediately
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initProcess);
} else {
initProcess();
}
}());