2014-09-15 3 views
1

중지는이 코드가 있습니다Velocity.js 애니메이션 콜백

$(window).scroll(function() { 
    if ($(this).scrollTop() > ($animate.headline.height() + 100)) { 
     $animate.header.velocity({height: "50px"}, { queue: false }); 
    } else { 
     $animate.header.velocity({height: "100px"}, { queue: false }); 
    } 
}); 

위에서 사용자가 스크롤 xxx는 픽셀이 다음 애니메이션을 시작해야하는 경우를, 그것은 잘 작동합니다.

나는 방금 알아 챘을 것이고, 스크롤 할 때마다 속도 애니메이션이 scrollTop을 확인하므로 애니메이션이 시작되기 전에 스크롤이 스크롤되기 때문에 전체 애니메이션이 부드럽게 움직이지 않습니다.

부드럽게하는 다른 방법이 있습니까?

예 :

http://codepen.io/anon/pen/bIkqF

+0

실적을보기 위해 사용할 수있는 최소한의 예가 있습니까? –

+0

여기 예 : http://codepen.io/anon/pen/bIkqF 애니메이션이 시작될 때 스크롤을 시도합니다. –

답변

0

당신이해야 스로틀 벤 독일어의 같은 몇 가지 라이브러리 수표 : https://raw.githubusercontent.com/cowboy/jquery-throttle-debounce/v1.1/jquery.ba-throttle-debounce.min.js.

이 설명서 페이지를 확인하십시오 : http://benalman.com/projects/jquery-throttle-debounce-plugin/. 귀하의 예를 들어

, 당신은 다음과 같이 사용할 수 있습니다 :

$(window).scroll($.throttle(250, checkTop)); 

function checkTop() { 
    if ($(this).scrollTop() > ($animate.headline.height() + 100)) { 
     $animate.header.velocity({height: "50px"}, { queue: false }); 
    } else { 
     $animate.header.velocity({height: "100px"}, { queue: false }); 
    } 
} 
+0

고마워요! 그게 내 문제를 해결 –

+0

이것은 완전히 불필요합니다 –

+1

@ ZachSaucier 난 그렇게 생각하지 않아요 : 당신의 대답에 대한 내 의견을 참조하십시오. 그러나이 간단한 플러그인은 손으로 쓸 수 있다는 것에 동의합니다. BTW, 설명서 페이지를 봐, 이것은 유익한입니다! –

3

당신이 대신 CSS 방식을 선호하십니까?

var header = $('.header'); 
    $(window).on('scroll', function() { 
     if ($(this).scrollTop() > (header.height() + 20)) { 
      header.addClass('shrink'); 
     } else { 
      header.removeClass('shrink'); 
     } 
    }); 

어설프게과 : 클래스를 전환 JS

.shrink{ 
    height:50px; 
} 

그리고 당신에 :

-webkit-transition: all 0.5s; 
position:fixed; 
top:0; 
left:0; 

가 원하는 높이에 대한 새 클래스를 추가 :

는 귀하의 헤더의 CSS를 설정 더 부드러운 효과를위한 전환의 초 속성

이렇게하면 GPU가 무거워지며 클래스 토글 성능에 미치는 영향은 무시할 수 있습니다. Demo

+1

'scroll' 핸들러를 * 스로틀 *하는 것을 잊지 마세요 (예를 들어, http://ejohn.org/blog/learning-from-twitter/ 참조하십시오. John Resig - jQuery의 작성자). 다시 공연! –

+0

@SamuelCaillerie가 기사의 날짜를 확인합니다. 스크롤 핸들러를 조율해야한다는 데 동의하지만,이 특별한 경우에는 필요하지 않습니다. CSS는 JS –

+2

이 아닌 애니메이션을 처리합니다. 1. 많은 jQuery 객체를 호출합니다. (BTW, 당신은'$ (this)'와'$ (". header")'를 캐시해야한다.) 2.당신은 콜백에서 약간의 무시할 수없는 대우 (CSS 부분에 추가로 순수 js이다.)가있다. 3. 오래된 컴퓨터/웹 브라우저를 가진 사용자가있다. 기사가 약간 오래되었습니다. 항상 최신입니다 !!!) –