2014-07-08 2 views
0

jQuery visible 플러그인을 사용하여 뷰포트에 요소가 표시되는지 여부를 감지하려고합니다. 나는이 같은 코드를 사용합니다jQuery가 스크롤 할 때 표시됩니다.

animateFrontPage: function(){ 
    var apps = 0; 
    if($('#apps-shelf').visible(true)) { 
     apps = 1; 
     if(apps == 1) { 
      $('#apps-shelf li').velocity("transition.bounceUpIn", { stagger: 150 }); 
      apps = 0 
     } 
    } 
} 

을 나는 스크롤 기능을 실행합니다

$(window).scroll(function() { 
    Functions.animateFrontPage(); 
}); 

문제는 - 애니메이션은 모든 스크롤 자체를 반복합니다. 그것을 막기 위해 무엇을 할 수 있습니까?

+0

플래그를 사용할 수 있습니다. 일단 애니메이션이 완료되면 true로 설정하고 플래그가 false이면 애니메이션 만 수행하십시오. – nick

+0

나는 내가 그랬다고 믿는다. 그러나 스크롤과 함께 재설정됩니다. 다른 것을 의미하는 경우 예제를 게시하십시오. –

+1

애니메이션을 한 번만 실행 하시겠습니까? 따라서 스크롤하면 애니메이션을보고 스크롤을 한 다음 뒤로 스크롤하면됩니다. – nick

답변

0

애니메이션을 한 번만 표시하려면 요소에 클래스를 추가하여 완료되었음을 알린 다음 요소에이 클래스가없는 경우 애니메이션을 수행 할 때마다 수행하십시오. 이 라인을 따라 아마도 뭔가 : 첫 번째 요소 $('#apps-shelf')A) 애니메이션 :

animateFrontPage: function(){ 
    var $el = $('#apps-shelf'); 
    if($el.visible(true) && !$el.hasClass('finished')) { 
     $el.addClass('finished'); 
     $el.find('li').velocity("transition.bounceUpIn", { stagger: 150 }); 
    } 
} 

업데이트

이것은 당신이 다른 애니메이션이 이러한 조건에서 실행하려면 필요한 다른 문이다 이미 발생했으며 b) 요소 $('#apps-shelf')이 더 이상 화면에 표시되지 않습니다 (예 : 과거 스크롤 한 것입니다).

animateFrontPage: function(){ 
    var $el = $('#apps-shelf'); 
    if($el.visible(true) && !$el.hasClass('finished')) { 
     $el.addClass('finished'); 
     $el.find('li').velocity("transition.bounceUpIn", { stagger: 150 }); 
    } else if (!$el.visible(true) && $el.hasClass('finished')){ 
     //other animation here 
    } 
} 
+0

좋아요, 그래도 작동하지만, 사라졌을 때 다른 애니메이션을 실행하고 싶다면? 'else removeClass'를 추가하려고했지만 루프를 실행합니다. –

+0

위의 답변을 업데이트했습니다. 나는 '사라졌을 때'라고 생각합니다. 애니메이션을 적용한 원래 요소가 스크린에서 벗어났다는 것을 의미합니까? 그렇지 않다면 좀 더 자세하게 설명하십시오. 하지만 위의 업데이트가 네가 쫓아 오는 것이어야한다.) – nick

관련 문제