Spaces:
Running
Running
File size: 1,967 Bytes
43969da |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
// Smooth scrolling for anchor links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
window.scrollTo({
top: target.offsetTop - 80,
behavior: 'smooth'
});
}
});
});
// Simple animation on scroll
const observerOptions = {
root: null,
rootMargin: '0px',
threshold: 0.1
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('animate-fade-in-up');
}
});
}, observerOptions);
document.querySelectorAll('.animate-on-scroll').forEach(el => {
observer.observe(el);
});
// Add animation classes to elements
document.addEventListener('DOMContentLoaded', function() {
// Add animation classes to feature cards
document.querySelectorAll('.grid > div').forEach((card, index) => {
card.classList.add('animate-on-scroll');
card.style.transitionDelay = `${index * 0.1}s`;
});
// Add animation to how-it-works steps
document.querySelectorAll('.flex .flex-shrink-0').forEach((step, index) => {
step.parentElement.classList.add('animate-on-scroll');
step.parentElement.style.transitionDelay = `${index * 0.2}s`;
});
});
// Animation CSS (added dynamically)
const style = document.createElement('style');
style.textContent = `
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.animate-fade-in-up {
animation: fadeInUp 0.6s ease-out forwards;
}
.animate-on-scroll {
opacity: 0;
}
`;
document.head.appendChild(style); |