52 lines
1.3 KiB
JavaScript
52 lines
1.3 KiB
JavaScript
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
"use strict";
|
|
|
|
/**
|
|
* Navbar shrink on scroll
|
|
*/
|
|
const navbar = document.querySelector('.navbar');
|
|
if (navbar) {
|
|
const handleScroll = () => {
|
|
if (window.scrollY > 50) {
|
|
navbar.classList.add('scrolled');
|
|
} else {
|
|
navbar.classList.remove('scrolled');
|
|
}
|
|
};
|
|
window.addEventListener('scroll', handleScroll);
|
|
handleScroll(); // Initial check
|
|
}
|
|
|
|
/**
|
|
* Smooth scroll for anchor links
|
|
*/
|
|
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
|
anchor.addEventListener('click', function (e) {
|
|
e.preventDefault();
|
|
const targetId = this.getAttribute('href');
|
|
const targetElement = document.querySelector(targetId);
|
|
if(targetElement){
|
|
targetElement.scrollIntoView({
|
|
behavior: 'smooth'
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
/**
|
|
* Bootstrap form validation
|
|
*/
|
|
const forms = document.querySelectorAll('.needs-validation');
|
|
Array.prototype.slice.call(forms).forEach(function (form) {
|
|
form.addEventListener('submit', function (event) {
|
|
if (!form.checkValidity()) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
}
|
|
form.classList.add('was-validated');
|
|
}, false);
|
|
});
|
|
|
|
});
|