Bonjour,
J'ai un petit Portfolio en ligne avec quelques éléments qui défilent grâce à une propriété CSS animation et l'Observer de JS.
Ce que j'aimerais c'est que chaque élément s'anime une seule fois seulement. J'ai essayé avec le unObserve dans une condition mais quand je le fais, dès qu'un premier élément s'anime, le reste n'est plus observé, donc ne s'anime plus, ce qui est logique. En fait je suis obligé d'avoir la vue sur tous les éléments pour que la condition fonctionne, ce qui n'est pas du tout optimal.
Mon site en ligne pour avoir un apercu des éléments en question : Suffit de taper zak bouhou sur Google, premier résultat.
Voici mon code JS :
Rapide commentaire du code : Une premiere variable qui va stocker tous les éléments sur lesquels on veut mettre un observer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 const animatedElements = document.querySelectorAll('.skillName, .iconSkills, .itemsProject'); observer = new IntersectionObserver(entries => { entries.forEach(entry => { if (entry.isIntersecting) { //console.log('in the view'); entry.target.classList.add('anim'); } else { //console.log('out of view'); entry.target.classList.remove('anim'); } }); }); animatedElements.forEach(animatedElement => { observer.observe(animatedElement); });
On crée un nouvel Object Observer. Pour chaque entrée, si l'élement est intercepté, on lui ajoute la classe anim (attribut CSS). Sinon (si l’élément n,'est plus observé) on retire l'animation.
on va ensuite appliquer l'observer à chaque élément parcouru.
Si vous avez un conseil je suis preneur. Merci d'avance
Partager