2012-11-28 3 views
1

사용자가 아래로 스크롤 한 후 DIV를 뷰포트로 수평 이동했습니다. 그런 다음 다시 스크롤하면 다시 스크롤됩니다. 그러나 그것이 슬라이드하는 방식은 매우 매우 어색해 보입니다 (잠시 멈추는 경우도 있습니다).DIV를 jQuery로 가로로 움직입니다.

당신은 setTimeout 그 자체로 if 상태에서 setTimeout 호출을 제거하고 전체 블록을 둘 필요가
div#doom_o { 
    position: fixed; 
    left: -300px; 
    z-index: -1; 
    height: 400px; 
    width: 309px; 
    background-image: url("../images/doom_o.png"); 
    background-repeat: no-repeat; 
} 
$(window).scroll(function() { 
    if ($(this).scrollTop() > 100) { 
     setTimeout(function() { 
      $('#doom_o').stop().animate({left: "20%"}); 
     }, 250); 
    } 
    else { 
     setTimeout(function() { 
      $('#doom_o').stop().animate({left: "-300px"}); 
     }, 250); 
    } 
}); 
+1

왜 downvotes? –

+1

@RoryMcCrossan : 나는 downvoted하지 않았다. 그러나 나는 downvote가 주석을 쓰지 않았다고 생각한다. 그 질문을 찾은 사람이 질문을 찾았다는 것을 암시한다 : 툴의 노력을 보여주지 않았거나, 명확하지 않거나, 유용하지 않다. 그러므로 당신의 질문에 대한 대답은 세 사람 중 한 사람이 그 사람에게 적용 되었기 때문입니다. 주제로 돌아 가기, 내 질문에 +1. 나는 그것이 유용한 질문이라고 생각한다. 애니메이션과 타임 아웃에 관해서는 언제나 배울 점이 많습니다. jQuery 기능을 능가하는 원활한 변환을 위해서는 CSS 변환이 OP를위한 선택 일 경우 이동하는 방법 일 수 있습니다. – Nope

답변

3

<div id="doom_o"></div> 
. 이것은 스크롤 이벤트가 발생할 때마다 말더듬이가 발생하지 않고 스크롤이 끝나면 코드가 한 번만 실행된다는 것을 의미합니다.

var timer; 
$(window).scroll(function() { 
    clearTimeout(timer); 
    var timer = setTimeout(function() { 
     if ($(this).scrollTop() > 100) { 
      $('#doom_o').stop().animate({ left: "20%" }); 
     } 
     else { 
      $('#doom_o').stop().animate({ left: "-300px" }); 
     } 
    }, 150) 
}); 

Example fiddle

+0

가끔 스택 오버 플로우의 성공 여부가 잘 설계되었거나 유용하고 지식이 풍부한 사용자 기반의 가치 때문인지 잘 모르겠습니다. 고맙습니다! :) – Barney

+1

좋은/유용한 답변 +1. @ 바니 : jQuery 애니메이션에는 부드러움에 관한 한계가 있습니다. 귀하의 경우에는 괜찮을 지 모르지만 jQuery 애니메이션에 갇혀 좌절감을 느끼는 경우 CSS3 변형을 살펴보십시오. 매우 부드럽고 대부분의 브라우저는 이미 많은 부분을 지원합니다. 대부분의 경우 IE가 예외가되는 경우가 있습니다. 귀하의 의견에 귀하의 질문에 관한 : 대답은 내 생각에 둘 것입니다. 하나는 다른 하나 없이는 작동하지 않을 것입니다. 절대 완벽하지는 않지만 균형이 잘 잡혀 있습니다. – Nope

관련 문제