33946-vm/assets/js/main.js
2025-09-08 12:59:49 +00:00

61 lines
2.0 KiB
JavaScript

document.addEventListener('DOMContentLoaded', function () {
const navbar = document.querySelector('.navbar');
const contactForm = document.getElementById('contactForm');
// Navbar shrink on scroll
window.addEventListener('scroll', () => {
if (window.scrollY > 50) {
navbar.classList.add('navbar-scrolled');
} else {
navbar.classList.remove('navbar-scrolled');
}
});
// Smooth scrolling for anchor links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
document.querySelector(this.getAttribute('href')).scrollIntoView({
behavior: 'smooth'
});
});
});
// Basic client-side form validation
if (contactForm) {
contactForm.addEventListener('submit', function(e) {
e.preventDefault();
let isValid = true;
const name = document.getElementById('name');
const email = document.getElementById('email');
const message = document.getElementById('message');
// Reset states
[name, email, message].forEach(f => {
f.classList.remove('is-invalid');
});
if (name.value.trim() === '') {
name.classList.add('is-invalid');
isValid = false;
}
if (email.value.trim() === '' || !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(email.value)) {
email.classList.add('is-invalid');
isValid = false;
}
if (message.value.trim() === '') {
message.classList.add('is-invalid');
isValid = false;
}
if (isValid) {
// On a real site, you'd submit this via AJAX.
// For this demo, we'll just show an alert.
alert('Thank you for your message! We will get back to you soon.');
contactForm.reset();
}
});
}
});