2017-11-08 22 views
-2

다음 JavaScript/jQuery 코드가 있습니다. 나는 그것으로 어떤 문제도 볼 수 없지만 그것이 올바르게 작동하지 않습니다. jQuery 애니메이션은 올바르게 한 번 실행 된 후 이상하게 작동합니다.

나는 그것을 정상적으로 작동하고 #forumHeader 최고 애니메이션입니다 아래로 스크롤 처음

$(document).ready(function(){ 
 
    $(window).scroll(function(){ 
 
     if($(window).scrollTop() > 0) { 
 
      $("#forumHeader").animate({top: '250px'}); 
 
     } 
 
     else 
 
     { 
 
      $("#forumHeader").animate({top: '60px'}); 
 
     } 
 
    }); 
 
});
#forumHeader 
 
{ 
 
    position: absolute; 
 
    top: 60px; 
 
    left: 0%; 
 
    height: 100px; 
 
    width: 200px; 
 
    color: white; 
 
    background-color: red; 
 
} 
 

 
#content 
 
{ 
 
    height: 1000px; 
 
    background-color: gray; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="forumHeader">Forum Header</div> 
 
<div id="content">Some content here</div>

: 250 픽셀. 그러나 다시 위로 스크롤하면 60px까지 애니메이션으로 돌아 가기까지 수 초가 걸릴 수 있습니다. 때로는 앞뒤로 바뀌고 때로는 아무 것도하지 않을 수도 있습니다. 문제가 무엇입니까? ..

+2

스크롤 이벤트를하는 데 도움이 스크롤하는 동안 한 번 이상 실행됩니다. 클래스 추가/제거 및 CSS로 애니메이션을 적용하면 수천 개의 애니메이션을 대기열에 넣는 것이 아니라 더 나은 결과를 얻을 수 있습니다. –

+1

스크롤 이벤트를 처리하는 모든 솔루션은 스로틀/디버깅의 일부 형식을 사용하여 스크롤 이벤트가 사용자의 관점에서 스크롤 동작을 반복적으로 처리하지 않도록해야합니다. 또한 스크롤 이벤트 핸들러 외부에서 ($ ("# forumHeader")와 같은) 셀렉터를 이동하고 성능을 높이기 위해 캐시 될 때마다 요소에 대한 변수 참조를 사용할 수 있으므로 캐시하는 것이 좋습니다. – Taplar

+0

@Taplar도 내 마음을 교차하지 않았다, 감사합니다. 아래 코드를 업데이트했습니다. –

답변

0

내가 추가하고 클래스를 제거하기 위해 jQuery를 사용하여 사용하는 것이, 다음 CSS 전환

$(document).ready(function(){ 

    // EDIT - Move the selector outside of the scroll event as suggested 
    var header = $("#forumHeader"); 

    $(window).scroll(function(){ 

     if($(window).scrollTop() > 0) { 
      header.addClass('slide'); 
     } else { 
      header.removeClass('slide'); 
     } 
    }); 
}); 
#forumHeader{ 
    top: 60px; 
    -webkit-transition: top 500ms ease-out ; 
    -moz-transition: top 500ms ease-out ; 
    -o-transition: top 500ms ease-out ; 
    transition: top 500ms ease-out ; 
} 
#forumHeader.slide{ 
    top: 250px; 
} 
#content 
{ 
height: 1000px; 
background-color: gray; 
} 
을 사용 도와주세요
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div id="forumHeader">Forum Header</div> 
<div id="content">Some content here</div> 

희망이

+0

나는이 기능을 많이 발생 시키지만 사이트에서 유사한 솔루션을 사용했지만 성능 문제는 발견하지 못했습니다. 이 기능을 향상시키는 방법에 대한 다른 의견이 있으면 크게 감사 할 것입니다. –

+0

내가 원했던 것처럼 작동하는 것 같고 더욱 효과적인 방법이라는 것을 알고 있습니다. 시간 내 주셔서 감사합니다! :) – Galaniitoluodda

+0

@ Jim-miraidev 빠른 예가 함께 디 바운스 (debounce) 형태로 던져졌습니다. https://jsfiddle.net/6bp0mzap/ – Taplar