64 lines
2.3 KiB
JavaScript
64 lines
2.3 KiB
JavaScript
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
// Smooth scroll for anchor links
|
|
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
|
anchor.addEventListener('click', function (e) {
|
|
e.preventDefault();
|
|
document.querySelector(this.getAttribute('href')).scrollIntoView({
|
|
behavior: 'smooth'
|
|
});
|
|
});
|
|
});
|
|
|
|
// Navbar scroll effect
|
|
const navbar = document.querySelector('.navbar');
|
|
window.addEventListener('scroll', () => {
|
|
if (window.scrollY > 50) {
|
|
navbar.classList.add('navbar-scrolled');
|
|
} else {
|
|
navbar.classList.remove('navbar-scrolled');
|
|
}
|
|
});
|
|
|
|
// Contact form validation
|
|
const form = document.querySelector('#contactForm');
|
|
const form = document.querySelector('#contactForm');
|
|
if (form) {
|
|
form.addEventListener('submit', function(event) {
|
|
let isValid = true;
|
|
// Clear previous errors
|
|
document.querySelectorAll('.invalid-feedback').forEach(el => el.style.display = 'none');
|
|
document.querySelectorAll('.form-control').forEach(el => el.classList.remove('is-invalid'));
|
|
|
|
// Name validation
|
|
const name = document.querySelector('#name');
|
|
if (name.value.trim() === '') {
|
|
isValid = false;
|
|
name.classList.add('is-invalid');
|
|
document.querySelector('#nameError').style.display = 'block';
|
|
}
|
|
|
|
// Email validation
|
|
const email = document.querySelector('#email');
|
|
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
if (!emailPattern.test(email.value)) {
|
|
isValid = false;
|
|
email.classList.add('is-invalid');
|
|
document.querySelector('#emailError').style.display = 'block';
|
|
}
|
|
|
|
// Message validation
|
|
const message = document.querySelector('#message');
|
|
if (message.value.trim() === '') {
|
|
isValid = false;
|
|
message.classList.add('is-invalid');
|
|
document.querySelector('#messageError').style.display = 'block';
|
|
}
|
|
|
|
if (!isValid) {
|
|
event.preventDefault();
|
|
}
|
|
});
|
|
}
|
|
});
|