weps25's picture
rends le plus jolie et immersif , donc pas du blanc en fond
17be401 verified
Raw
History Blame Contribute Delete
2.14 kB
document.addEventListener('DOMContentLoaded', () => {
// Add cosmic particles animation
createParticles();
// Animate elements on scroll
animateOnScroll();
// Add hover effects to interactive elements
addHoverEffects();
});
function createParticles() {
const particleContainer = document.createElement('div');
particleContainer.className = 'fixed inset-0 -z-10 overflow-hidden pointer-events-none';
document.body.appendChild(particleContainer);
for (let i = 0; i < 50; i++) {
const particle = document.createElement('div');
particle.className = 'absolute rounded-full bg-gradient-to-r from-cosmic-500 to-nebula-500';
particle.style.width = `${Math.random() * 5 + 1}px`;
particle.style.height = particle.style.width;
particle.style.left = `${Math.random() * 100}vw`;
particle.style.top = `${Math.random() * 100}vh`;
particle.style.opacity = Math.random() * 0.5 + 0.1;
const duration = Math.random() * 20 + 10;
particle.style.animation = `float ${duration}s linear infinite`;
particleContainer.appendChild(particle);
}
}
function animateOnScroll() {
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('animate-fadeInUp');
}
});
}, {
threshold: 0.1
});
document.querySelectorAll('.p-6').forEach(card => {
observer.observe(card);
card.classList.add('opacity-0', 'transition-all', 'duration-500', 'transform', 'translate-y-6');
});
}
function addHoverEffects() {
const cards = document.querySelectorAll('.p-6');
cards.forEach(card => {
card.addEventListener('mouseenter', () => {
const icon = card.querySelector('i');
icon.classList.add('animate-pulse');
});
card.addEventListener('mouseleave', () => {
const icon = card.querySelector('i');
icon.classList.remove('animate-pulse');
});
});
}