2012-05-13 12 views
1

こんにちは私は、ブラウザが特定の距離をスクロールするとフェードインしてアニメートする「トップに戻る」ボタンを持っています。問題は、ブラウザがscolledされるたびに.animate()が何度も繰り返されることです。一度起こったら、アニメーションを止める方法はありますか?ここで乾杯jquery .animate()がスクロールで何度も繰り返しています

は、コードは次のとおりです。

$('.up_arrow').hide(); 

    // fade in up arrow 
    $(function() { 
    $(window).scroll(function() { 
    if ($(this).scrollTop() > 100) { 
     $('.up_arrow').fadeIn(2000, 'swing') 

     .animate ({ 
      opacity: 1, 
      left: '+=30' 
     }, 
     { 
      duration: '2000', 
      easing: 'swing', 
      queue: false 
     }   
     ); 

     } else { 
     $('.up_arrow').fadeOut(2000, 'swing'); 
     } 
}); 
}); 

答えて

2
$(function() { 
    var stop = false; 
    $(window).scroll(function() { 
     if ($(this).scrollTop() > 100 && stop == false) { 
      $('.up_arrow').fadeIn(2000, 'swing') 
       .animate({ 
       opacity: 1, 
       left: '+=30' 
      }, { 
       duration: '2000', 
       easing: 'swing', 
       queue: false 
      }); 
      stop = true; 
     } else { 
      $('.up_arrow').fadeOut(2000, 'swing'); 
      stop = false; 
     } 
    }); 
}); 
+0

私のテストでは、 "stop == false"ステートメントはif "scrollTop> 100" ifステートメントの中にあるはずです。それ以外の場合、120にスクロールしてfalseにすると、trueに設定され、直後のフレームは121とtrueになり、settはfalseに戻り、すぐに122の次のフレームで再びアニメーションを行う準備ができます。私は分かりません。 –

1

私がstop()メソッドは、ここで動作するはずですし、おそらく最善の方法だろうと思います。

​​

私はanimate()だけで使用しましたが、そのトリックを行う必要があります。

関連する問題