2017-04-05 1 views
1

Je remplace un fichier jpg par un fichier gif animé lorsque le conteneur div apparaît dans la fenêtre. Ça marche. Important: le fichier gif n'a pas de boucle. Mon problème: lorsque vous faites défiler à nouveau, même un peu, vers le haut ou vers le bas, le remplacement joue à nouveau. Existe-t-il une solution simple pour arrêter cet événement après le premier remplacement? MerciComment puis-je jouer une seule fois à l'animation?

jQuery(document).ready(function($){ 
 
\t 
 
\t var $window = $(window); 
 
\t var $elem = $(".animated") 
 

 
\t \t function isScrolledIntoView($elem, $window) { 
 
\t \t \t var docViewTop = $window.scrollTop(); 
 
\t \t \t var docViewBottom = docViewTop + $window.height(); 
 

 
\t \t \t var elemTop = $elem.offset().top; 
 
\t \t \t var elemBottom = elemTop + $elem.height(); 
 

 
\t \t \t return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop)); 
 
\t \t } 
 

 

 
\t $(document).on("scroll", function() { 
 
\t \t if (isScrolledIntoView($elem, $window)) { 
 
\t \t \t $("#graph1").attr("src","images/graphsSECHE_500x500_noloop2.gif"); 
 
\t \t } 
 
\t \t 
 
\t }); 
 
});

+0

définissez un booléen global et définissez-le sur true ou false selon que vous avez lu la vidéo ou non, puis ajoutez-le à votre chèque – Pete

+0

ou si c'est littéralement juste un élément qui change, vous pouvez dissocier le gestionnaire d'événement scroll sur le document une fois qu'il a été utilisé une fois? –

+0

ou similaire au commentaire de Pete, mais vous pouvez affecter les données à l'élément lui-même en utilisant la fonctionnalité de données de jquery, puis vérifier que par élément. Cela permet alors d'affecter de nombreux éléments de manière indépendante. –

Répondre

0

Initialiser une valeur booléenne à la charge de page, par exemple:

var played = false; 

Vérifiez ensuite si votre animation comme cela a déjà été joué, et ne pas oublier de fait définir le vrai à l'intérieur du si par:

if (isScrolledIntoView($elem, $window) && played === false) { 
    $("#graph1").attr("src","images/graphsSECHE_500x500_noloop2.gif"); 
    played = true; 
} 
+0

Merci beaucoup DocWeird: cela fonctionne avec un var joué = vrai –

+0

Haha, oui, vous avez raison - une erreur de ma part. J'étais un peu pressé. Réponse corrigée. – DocWeird