2017-04-05 9 views
1

divコンテナがビューポートに表示されたら、jpgファイルをアニメーションgifファイルに置き換えます。できます。重要:gifファイルにはループがありません。 私の問題:もう一度スクロールすると、ちょっとでも、上または下にあっても、置き換えが再び行われます。 最初の交換後にこのイベントを停止する簡単な方法はありますか? おかげアニメーションは1回だけ再生できますか?

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

グローバルブールを設定し、ビデオを再生したかどうかに基づいてtrueまたはfalseに設定してから – Pete

+0

を追加するか、それが文字どおりの要素の1つであれば、ドキュメントのスクロールイベントハンドラをアンバインドできます一度それが一度使用されたら? –

+0

やPeteのコメントと似ていますが、jqueryのデータ機能を使用して要素自体にデータを割り当ててから、その要素ごとにチェックすることができます。これにより、多くの要素を個別に割り当てることができます。 –

答えて

0

は、たとえば、ページのロード時にブール値を初期化します。

var played = false; 

次に、あなたのアニメーションが既に再生されているかどうかを確認し、実際にすることを忘れないでくださいifの内側にtrueを設定します。

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

非常に大変ありがとうDocWeird:それはvar plays = trueで動作します –

+0

ハハ、そうです、あなたは間違いです。私は急いで少しだった。回答が修正されました。 – DocWeird

関連する問題