JQuery $ .scrollTo () 함수를 사용하여 창을 스크롤하는 방법


98

사용자가 문서 상단에 가까워 질 때마다 100px 아래로 스크롤하려고합니다.

사용자가 문서의 맨 위에 가까워지면 실행되는 함수가 있지만 .scrollTo 함수가 작동하지 않습니다.

나는 그것이 실제로 라인인지 아닌지 확인하기 위해 전후에 경고를 두었고 첫 번째 경고 만 울립니다. 여기에 코드가 있습니다.

alert("starting");
$.scrollTo({ top: '+=100px', left: '+=0px' }, 800);
alert("finished");

나는 전체적으로 다른 많은 jquery 함수를 사용하고 있기 때문에 jquery 페이지가 제대로 연결되어 있다는 것을 알고 있으며 모두 잘 작동합니다. 또한 위에서 'px'를 제거하려고 시도했지만 차이가없는 것 같습니다.


3
Jquery 자체는 잘 작동하지만 scrollTo 플러그인이 제대로 연결되어 있습니까? 이러한 경고 중 하나를 alert ($. scrollTo);
Andrew

답변:


97

작동하지 않는 경우 jQuery의 scrollTop 메서드를 사용해 보지 않겠습니까?

$("#id").scrollTop($("#id").scrollTop() + 100);

원활하게 스크롤하려면 기본 javascript setTimeout / setInterval 함수를 사용하여 설정된 시간 동안 1px 씩 스크롤되도록 할 수 있습니다.


8
개별 요소가 아닌 전체 페이지를 스크롤하려면 Tim 이 여기에서 지적한 것처럼 $ ( 'html, body')를 사용 하십시오. $ ( 'body')는 모든 브라우저에서 작동하지 않습니다.
i-- 2013 년

321
$('html, body').animate({scrollTop: $("#page").offset().top}, 2000);

19
왜 사람들이 'html'대신 scrollTop에 'html, body'를 사용하는지 궁금해했습니다. 이것에 대한 어떤 생각?
Scott Greenfield

+1이 나를 위해 일했습니다.) 또한 html, bodyhtml 대신 왜 그런지 알고 싶습니다 .
Kato

9
@ScottGreenfield, @Kato : 이유는 확실하지 않지만이 댓글은 bodyChrome 4에서 중단을 포함하지 않는다고 말합니다 . stackoverflow.com/questions/1890995/…
Yuji '

scrollTop: 0또한 잘 작동합니다. 그러나 기간이 줄어 듭니다. 속도를 1000으로 설정하면 잘 작동합니다
shashwat

이것은 완전한 메소드를 추가하기 전까지는 좋은 해결책입니다. 두 번 실행됩니다. @complistic의 솔루션은 더 우아하고 그것을 방지합니다.
plankguy

41

jQuery는 이제 scrollTop을 애니메이션 변수로 지원합니다.

$("#id").animate({"scrollTop": $("#id").scrollTop() + 100});

더 이상 원활하게 스크롤하기 위해 setTimeout / setInterval이 필요하지 않습니다.


구문 오류가 있습니다. 닫는 {이 없습니다. 그렇지 않으면 이것은 좋은 지적입니다.
여호수아

1
$("#id").offset().top대신 해야합니까 ?
codeulike 2011 년

15

htmlvs body문제를 해결 하기 위해 CSS를 직접 애니메이션하지 않고 window.scrollTo();각 단계를 호출하여이 문제를 해결했습니다 .

$({myScrollTop:window.pageYOffset}).animate({myScrollTop:300}, {
  duration: 600,
  easing: 'swing',
  step: function(val) {
    window.scrollTo(0, val);
  }
});

브라우저 간 JavaScript를 사용하므로 새로 고침 문제없이 잘 작동합니다.

jQuery의 애니메이션 기능으로 수행 할 수있는 작업에 대한 자세한 내용 은 http://james.padolsey.com/javascript/fun-with-jquerys-animate/ 를 참조하십시오.


1
이것은 훌륭합니다. 난 단지 변경 window.pageYOffset$(window).scrollTop()window.scrollTo(0, val)$(window).scrollTop(val)내가 브라우저 호환성에 대해 걱정할 필요가 없습니다.
leftclickben 2014 년

1
그런 jQuery의 animate 메서드에 개체를 전달할 생각은 없었습니다. 가능한 많은 용도. 이 솔루션은 훌륭합니다. 감사합니다.
Synexis

예, 기술은 중요한 기여입니다. 이전에는 "window.scrollTo ()"를 직접 사용하여 브라우저 문제를 해결했지만 "완전한"콜백이나 약속을 허용하지 않습니다. 이 솔루션에 대해 @complistic에 감사드립니다. 또한 @leftclickben에게 감사드립니다. ".scrollTop ()"을 사용하여 그의 변형을 구현했습니다. 또한 링크 당 "james.padolsey"기사는 간결하고 읽을만한 가치가 있습니다.
IAM_AL_X

"window.scrollTo ()"는 모든 최신 브라우저와 호환되어야한다고 생각합니다.
IAM_AL_X

7

구문이 약간 잘못 된 것 같습니다 ... 귀하의 코드를 기반으로 800ms에서 100px 아래로 스크롤하려고한다고 가정합니다. 그러면 이것이 작동합니다 (scrollTo 1.4.1 사용).

$.scrollTo('+=100px', 800, { axis:'y' });

6

실제로 뭔가

function scrollTo(prop){
    $('html,body').animate({scrollTop: $("#"+prop).offset().top +
 parseInt($("#"+prop).css('padding-top'),10) },'slow');
}

잘 작동하고 패딩을 지원합니다. 마진도 쉽게 지원할 수 있습니다. 완료는 아래를 참조하세요.

function scrollTo(prop){
    $('html,body').animate({scrollTop: $("#"+prop).offset().top 
+ parseInt($("#"+prop).css('padding-top'),10) 
+ parseInt($("#"+prop).css('margin-top'),10) +},'slow');
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.