bkpradhan8's picture
nice check everting working fine
c89838c verified
Raw
History Blame Contribute Delete
3.69 kB
// Smooth scrolling for anchor links
document.addEventListener('DOMContentLoaded', function() {
// Smooth scroll for anchor links
const anchorLinks = document.querySelectorAll('a[href^="#"]');
anchorLinks.forEach(link => {
link.addEventListener('click', function(e) {
e.preventDefault();
const targetId = this.getAttribute('href');
const targetElement = document.querySelector(targetId);
if (targetElement) {
targetElement.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});
// Counter animation for stats
const counters = document.querySelectorAll('.counter-number');
const speed = 200;
const animateCounter = (counter) => {
const target = +counter.getAttribute('data-target');
const count = +counter.innerText;
const increment = target / speed;
if (count < target) {
counter.innerText = Math.ceil(count + increment);
setTimeout(() => animateCounter(counter), 1);
} else {
counter.innerText = target;
}
};
// Intersection Observer for counter animation
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
animateCounter(entry.target);
}
});
counters.forEach(counter => {
observer.observe(counter);
});
// Parallax effect for background elements
window.addEventListener('scroll', function() {
const scrolled = window.pageYOffset;
const parallaxElements = document.querySelectorAll('.parallax');
parallaxElements.forEach(element => {
const speed = element.getAttribute('data-speed') || 0.5;
element.style.transform = `translateY(${scrolled * speed}px)`;
});
// Mobile menu toggle (for future implementation)
window.toggleMobileMenu = function() {
const mobileMenu = document.getElementById('mobileMenu');
mobileMenu.classList.toggle('hidden');
};
// Add hover effects to service cards
const serviceCards = document.querySelectorAll('.service-card');
serviceCards.forEach(card => {
card.addEventListener('mouseenter', function() {
this.style.transform = 'translateY(-8px)';
this.style.boxShadow = '0 25px 50px -12px rgba(0, 0, 0, 0.25)';
});
card.addEventListener('mouseleave', function() {
this.style.transform = 'translateY(0)';
this.style.boxShadow = '0 10px 15px -3px rgba(0, 0, 0, 0.1)';
});
});
// Form handling (for contact forms)
const contactForms = document.querySelectorAll('.contact-form');
contactForms.forEach(form => {
form.addEventListener('submit', function(e) {
e.preventDefault();
// Add form submission logic here
alert('Thank you for your message! We will get back to you soon.');
form.reset();
});
});
// Lazy loading for images
const imageObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.getAttribute('data-src');
imageObserver.unobserve(img);
}
});
});
document.querySelectorAll('img[data-src]').forEach(img => {
imageObserver.observe(img);
});
// Add loading animation
window.addEventListener('load', function() {
document.body.classList.add('loaded');
});
});