JavaScript를 사용하여 페이지 상단으로 스크롤 하시겠습니까?


1592

JavaScript를 사용하여 페이지 상단으로 스크롤하려면 어떻게합니까? 스크롤바가 즉시 상단으로 이동하더라도 바람직합니다. 부드러운 스크롤을 찾고 있지 않습니다.


2019 년 피하기 위해“이 사이트는 스크롤 링크 된 위치 결정 효과를 사용하는 것 같습니다. 이것은 비동기 패닝에서는 잘 작동하지 않을 수 있습니다.”내 스크립트 사용 stackoverflow.com/a/57641938/5781320
Constantin

답변:


2170

애니메이션을 적용하기 위해 변경이 필요하지 않은 경우 특별한 플러그인을 사용할 필요가 없습니다. 네이티브 JavaScript window.scrollTo 메서드 만 사용하면됩니다. 0,0을 전달하면 페이지가 왼쪽 상단으로 즉시 스크롤됩니다. .

window.scrollTo(x-coord, y-coord);

매개 변수

  • x 좌표는 가로 축을 따른 픽셀입니다.
  • y 좌표는 세로 축을 따른 픽셀입니다.

176
내 요점은, 부드러운 스크롤을 애니메이션 할 필요가 없다면 jQuery를 사용할 필요가 없습니다.
daniellmb

22
jeff의 의견이 웃긴 것은 브라우저를 통해 작업하는 것을 원하는 사람들에게 정직하게 말하면 jQuery를 사용해야합니다. 이것은 광고 코드의 속도를 늦추는 라이브러리의 오버 헤드를 감당할 수 없기 때문에 지금 많은 순수 자바 스크립트를 작성해야하는 사람으로부터 나왔습니다. (
Will

11
이 답변은 질문과 관련이 없습니다. 다음과 같은 질문이 있으면 좋을 것입니다. 페이지 상단으로 스크롤하려면 어떤 스크립트와 메소드를 사용해야합니까? 정답은 여기에 있습니다 : stackoverflow.com/questions/4147112/...
skobaljic

2
Firefox 40 및 Chrome 44에서 나를 위해 일하기 (Mikhail의 의견을 해결하기 위해)
tony

10
페이지 하단으로 스크롤window.scrollTo(0, document.body.scrollHeight);
emix

1344

부드러운 스크롤을 원하면 다음과 같이 해보십시오.

$("a[href='#top']").click(function() {
  $("html, body").animate({ scrollTop: 0 }, "slow");
  return false;
});

<a>태그를 가지고 href="#top"상단으로 부드럽게 스크롤합니다.


+1. 나는 이와 같은 일을하는 법을 궁금해하고 있었고 구글이 나를 여기로 인도했다. Q : 문서에서 "scrollTop"기능은 어디에 있습니까? 방금 보았지만 찾을 수 없었습니다.
sqram

22
scrollTop은 기능하지 않고 윈도우 요소의 속성입니다.
Jalal El-Shaer

1
Animate의 전체 콜백을 사용하면 두 번 실행되므로 올바르게 작동하지 않습니다.
David Morales

5
브라우저 호환성을 위해서는 "html"과 "body"가 필요합니다. 즉, "body"만있는 Chrome v27 스크롤은 IE8과는 다릅니다. IE8은 "html"로 스크롤되지만 Chrome v27은 스크롤되지 않습니다.
SushiGuy

1
@jalchr 사실, window.pageYOffset창 e̶l̶e̶m̶e̶n̶t̶ 객체의 속성입니다.
Alex W

176

이것을 스크롤하여 위로 스크롤하십시오.

<script>
 $(document).ready(function(){
    $(window).scrollTop(0);
});
</script>

이것은 동일하다 : if ( 'scrollRestoration'in history) {history.scrollRestoration = 'manual'; }
Vasilii Suricov

123

부드러운 애니메이션으로 더 나은 솔루션 :

// this changes the scrolling behavior to "smooth"
window.scrollTo({ top: 0, behavior: 'smooth' });

참조 : https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollTo#Example


당신은 여전히위한 polyfill 지원해야 할 수도 있습니다 ScrollOptions(특정 브라우저 용) : github.com/iamdustan/smoothscroll
jneuendorf

나는이 솔루션을 많이 좋아합니다.
SuperManEver

누군가 Safari 또는 Internet Explorer에서 이것을 테스트하여 제대로 작동하는지 확인할 수 있습니까? 감사합니다
Fabio Magarelli

1
@FabioMagarelli 그것은 IE에서 테스트되지 않은 Safari에서 잘 작동합니다. 참고로 Safari에서 테스트하려면 개발자 도구-> 콘솔에서 위의 코드를 스크롤하여 복사하여 붙여 넣은 페이지를 열고 확인하십시오 (Safari 버전 13.0.5).
Ganesh Ghalame

104

이를 위해 jQuery가 필요하지 않습니다. 표준 HTML 태그로 충분합니다 ...

<div id="jump_to_me">
    blah blah blah
</div>

<a target="#jump_to_me">Click Here To Destroy The World!</a>

12
+1 상단이 아닌 특정 요소로 이동해야하는 경우에 좋습니다.
Ish

38
'<a href="#"> 맨 위 </a>'를 사용하여 페이지 맨 위로 이동하십시오.
Bakanekobrain

3
이것은 SPA를 다룰 때 갈 수있는 가장 좋은 방법 인 것 같습니다
Phil

좋은! 부드럽게 스크롤하는 방법이 있습니까?
stallingOne

65

이러한 모든 제안은 다양한 상황에 적합합니다. 검색을 통해이 페이지를 찾을 사람들을 위해, 하나는 줄 수있는 시도. 플러그인이없는 JQuery는 요소로 스크롤합니다.

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

47

부드러운 스크롤, 순수한 자바 스크립트 :

(function smoothscroll(){
    var currentScroll = document.documentElement.scrollTop || document.body.scrollTop;
    if (currentScroll > 0) {
         window.requestAnimationFrame(smoothscroll);
         window.scrollTo (0,currentScroll - (currentScroll/5));
    }
})();

31
<script>
$(function(){
   var scroll_pos=(0);          
   $('html, body').animate({scrollTop:(scroll_pos)}, '2000');
});
</script>

편집하다:

$('html, body').animate({scrollTop:(scroll_pos)}, 2000);

상단 및 왼쪽 여백이있는 또 다른 방법은 다음과 같습니다.

window.scrollTo({ top: 100, left: 100, behavior: 'smooth' });

4
애니메이션 함수에서 문자열로 지속 시간이 확실합니까?
yogesh

animate함수 에서 지속 시간 동안 문자열을 사용할 수 없으며 대신 다음을 사용해야합니다. $('html, body').animate({scrollTop:(scroll_pos)}, 2000);
Kenny Alvizuris

1
괄호 안에 0을 싸는 요점은 무엇입니까? ((0))은 단순히 0으로 평가됩니다.
Jack Vial

예 @ 잭, 할 수 있습니다.
Kamlesh

29
<script>

  $("a[href='#top']").click(function() {
     $("html, body").animate({ scrollTop: 0 }, "slow");
     return false;
  });
</script>

html로

<a href="#top">go top</a>

28

정말 이상합니다.이 질문은 5 년 동안 활성화되어 있으며 스크롤링 애니메이션에 대한 바닐라 JavaScript 답변은 아직 없습니다…

var scrollToTop = window.setInterval(function() {
    var pos = window.pageYOffset;
    if ( pos > 0 ) {
        window.scrollTo( 0, pos - 20 ); // how far to scroll on each step
    } else {
        window.clearInterval( scrollToTop );
    }
}, 16); // how fast to scroll (this equals roughly 60 fps)

원하는 경우 이것을 함수로 감싸서 onclick속성 을 통해 호출 할 수 있습니다 . 이 jsfiddle을 확인하십시오

참고 : 이것은 매우 기본적인 솔루션이며 아마도 가장 성능이 좋은 솔루션이 아닐 수도 있습니다. https://github.com/cferdinandi/smooth-scroll 에서 매우 정교한 예를 찾을 수 있습니다.


6
이 질문은 jQuery 솔루션을 명시 적으로 요구합니다. 너무 이상하지

2
나를위한 최고의 솔루션. 플러그인도없고, 부피가 큰 jquery 라이브러리도 간단한 자바 스크립트가 아닙니다. Kudos
2840467

남자, 나는 또한 5 년 후에 동일한 논리 XD를 만들었습니다. 정확히 동일한 논리입니다. 간격 시간과 빼기 위해 사용하는 정수와 같은 값 만 다릅니다 .XD를 믿을 수 없습니다. TBH, 답변을 받으러 왔지만 이미 답변을 올렸습니다.
Germa Vinsmoke

27

부드러운 스크롤을 원하면 다음을 시도하십시오.

$("a").click(function() {
     $("html, body").animate({ scrollTop: 0 }, "slow");
     return false;
});

또 다른 솔루션은 JavaScript window.scrollTo 메서드입니다.

 window.scrollTo(x-value, y-value);

매개 변수 :

  • x- 값은 가로 축을 따른 픽셀입니다.
  • y- 값은 세로 축을 따른 픽셀입니다.

7
copycat ... 사용자 답변보기 ... 이것은 단지 상위 2 답변의 편집입니다 ....
Laurent B

그것은 stackoverflow를 사용하는 합법적 인 방법입니다-한곳에 두는 것이 더 실용적입니다. Joel Spolsky는 스택 오버 플로우가 한 시점에서 어떻게 작동해야하는지에 대한 예로 기존 답변의 재사용을 사용했습니다. 관심이 있다면 블로그 게시물을 찾아 볼 수 있습니다
Edgar H

26

with with window.scrollTo(0, 0);매우 빠르
므로 Mark Ursino 예제를 사용해 보았지만 Chrome에서는 아무 일도 일어나지
않으며 이것을 찾았습니다.

$('.showPeriodMsgPopup').click(function(){
    //window.scrollTo(0, 0);
    $('html').animate({scrollTop:0}, 'slow');//IE, FF
    $('body').animate({scrollTop:0}, 'slow');//chrome, don't know if Safari works
    $('.popupPeriod').fadeIn(1000, function(){
        setTimeout(function(){$('.popupPeriod').fadeOut(2000);}, 3000);
    });
});

클라이언트가 "지금 예약"버튼을 클릭하고 대여 기간을 선택하지 않았을 때 3 개의 브라우저를 모두 테스트했으며 작동합니다.
CSS를 사용
하고 있습니다. 2 초, 3 초 후에 사라짐


html과 body를 모두 타겟팅해야한다는 점을 지적 해 주셔서 감사합니다. 나는 html을 위해 그것을하고 있었고 왜 Chrome에서 작동하지 않는지 궁금했습니다.
Jared

바디 애니메이션은 Safari에서 작동하므로 그에 따라 답변을 업데이트하고 있습니다.
Dave DuPlantis

46
" 3 개의 브라우저를 모두 테스트 했습니까?" 미도리, 루아 킷, 곤 커러 : p
Anko

14
왜 두 줄을 추가하는 대신 $ ( 'html', 'body'). animate ({scrollTop : 0})합니까?
매트 스미스

23

많은 사용자 과 같이, 크로스 브라우저 호환성을 위해 모두 HTML과 몸 태그를 선택하는 것이 좋습니다 :

$('html, body').animate({ scrollTop: 0 }, callback);

콜백을 한 번만 실행하면 믿을 수 있습니다. 두 가지 요소를 선택했기 때문에 실제로 두 번 실행됩니다.

그것이 당신에게 문제가된다면, 당신은 다음과 같이 할 수 있습니다 :

function scrollToTop(callback) {
    if ($('html').scrollTop()) {
        $('html').animate({ scrollTop: 0 }, callback);
        return;
    }

    $('body').animate({ scrollTop: 0 }, callback);
}

이것이 작동하는 이유는 Chrome $('html').scrollTop()에서 0을 반환하지만 Firefox와 같은 다른 브라우저에서는 그렇지 않습니다.

스크롤 막대가 이미 맨 위에있는 경우 애니메이션이 완료 될 때까지 기다리지 않으려면 다음을 시도하십시오.

function scrollToTop(callback) {
    if ($('html').scrollTop()) {
        $('html').animate({ scrollTop: 0 }, callback);
        return;
    }

    if ($('body').scrollTop()) {
        $('body').animate({ scrollTop: 0 }, callback);
        return;
    }

    callback();
}

19

오래된 #top트릭을 할 수 있습니다

document.location.href = "#top";

FF, IE 및 Chrome에서 잘 작동합니다


좋은! 부드럽게 스크롤하는 방법이 있습니까?
stallingOne

탐색 기반 솔루션을 피해야하며 Sriramajeyam의 답변에 대한 의견을 참조하십시오.
Andrew Grothe

15

$(".scrolltop").click(function() {
  $("html, body").animate({ scrollTop: 0 }, "slow");
  return false;
});
.section{
 height:400px;
}
.section1{
  background-color: #333;
}
.section2{
  background-color: red;
}
.section3{
  background-color: yellow;
}
.section4{
  background-color: green;
}
.scrolltop{
  position:fixed;
  right:10px;
  bottom:10px;
  color:#fff;
}
<html>
<head>
<title>Scroll top demo</title>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
</head>
<body>
<div class="content-wrapper">
<div class="section section1"></div>
<div class="section section2"></div>
<div class="section section3"></div>
<div class="section section4"></div>
<a class="scrolltop">Scroll top</a>
</div>

</body>
</html>


3
이 코드는 질문에 대답 할 수 있지만, 문제를 해결하는 방법과 이유에 대한 정보를 제공하여 장기적인 가치를 향상시킵니다.
L_J

답을 설명하십시오!
Ullas Hunka

웹 페이지에서 모든 사용자는 상단 스크롤 버튼을 클릭 한 다음 페이지가 애니메이션으로 상단 상단 스크롤됩니다.
arvinda kumar

왜 jquery scroll () 대신 animate ()입니까?
Akin Hwan


14

$(document).scrollTop(0); 작동합니다.


2
Firefox를 사용하지 않으면 작동하지 않습니다. 하나의 인수 만 제공하면 오류가 발생합니다 (오류 : 인수가 충분하지 않음 [nsIDOMWindow.scrollTo]).
허스키

14

비 jQuery 솔루션 / 순수 JavaScript :

document.body.scrollTop = document.documentElement.scrollTop = 0;


10

이 코드를 사용해보십시오 :

$('html, body').animate({
    scrollTop: $("div").offset().top
}, time);

div => Dom Element 스크롤하려는 위치.

시간 => 밀리 초, 스크롤 속도를 정의하십시오.


8

왜 JQuery 내장 함수 scrollTop을 사용하지 않습니까?

$('html, body').scrollTop(0);//For scrolling to top

$("body").scrollTop($("body")[0].scrollHeight);//For scrolling to bottom

짧고 간단합니다!



8

JQuery가 필요하지 않습니다. 간단히 당신은 스크립트를 호출 할 수 있습니다

window.location = '#'

"맨 위로 이동"버튼을 클릭하면

샘플 데모 :

output.jsbin.com/fakumo#

추신 : angularjs와 같은 최신 라이브러리를 사용하는 경우이 방법을 사용하지 마십시오. URL hashbang이 손상되었을 수 있습니다.


9
불행히도,이 경우 페이지를 스크롤하는 대신 물리적으로 위치를 변경하므로 최상의 솔루션이 아닙니다. 위치가 중요한 경우 문제가 발생할 수 있습니다 (각도 라우팅 등을 사용하는 경우)
Yaroslav Rogoza

2
@YaroslavRogoza가 맞습니다. 그 동안 수 있습니다 간단한 경우에 작동,이 솔루션을 권장하지 않습니다. 위치가 점점 중요 해지고 있으며 단일 페이지 앱은 해시를 광범위하게 사용하여 탐색을 처리합니다. 해시 기반 탐색에 해시 기반 탐색을 추가하거나 해시 기반 탐색을 추가 할 때 즉시 부작용 버그가 발생합니다.
Andrew Grothe

8

이 스크립트를 사용하면 맨 위로 직접 스크롤 할 수 있습니다.

<script>
$(document).ready(function(){
    $("button").click(function(){
        ($('body').scrollTop(0));
    });
});
</script>

8

순수한 JavaScript 솔루션 :

function scrollToTop() {
  window.scrollTo({
    top: 0,
    behavior: 'smooth'
});

Codepen 에서 애니메이션 솔루션을 작성합니다

또한 CSS scroll-behavior: smooth속성을 사용 하여 다른 솔루션을 시도 할 수 있습니다 .

html {
    scroll-behavior: smooth;
}

@media (prefers-reduced-motion: reduce) {
    html {
        scroll-behavior: auto;
    }
}

7

부드러운 스크롤을 원하지 않으면 부드러운 스크롤 애니메이션을 시작하자마자 속임수와 중지 할 수 있습니다.

   $(document).ready(function() {
      $("a[href='#top']").click(function() {
          $("html, body").animate({ scrollTop: 0 }, "1");              
          $('html, body').stop(true, true);

          //Anything else you want to do in the same action goes here

          return false;                              
      });
  });

권장 / 허용 여부는 모르겠지만 작동합니다. :)

언제 사용하겠습니까? 확실하지 않지만 어쩌면 한 번의 클릭으로 Jquery로 한 가지를 애니메이션으로 만들고 싶지만 애니메이션없이 다른 것을합니까? 즉, 페이지 상단에서 슬라이드 인 관리자 로그인 패널을 열고 즉시 상단으로 이동하여 확인하십시오.


6

자극

이 간단한 솔루션은 기본적으로 작동하며 모든 위치로 부드러운 스크롤을 구현합니다.

#내 의견으로는 섹션에 링크하고 싶을 때 유용하지만 앵커를 사용 하지 않는 것이 좋습니다. 그러나 어떤 상황에서는 특히 위를 가리킬 때 두 개의 다른 URL이 동일한 위치 ( http://www.example.orghttp://www.example.org/# )

해결책

넣어 ID를 사용하면 예를 들어, 귀하의 첫 번째 스크롤하려는 태그 섹션 이 질문에 대한 대답,하지만 ID는 페이지 곳곳에 배치 될 수있다.

<body>
  <section id="top">
    <!-- your content -->
  </section>
  <div id="another"><!-- more content --></div>

그런 다음 버튼으로 링크를 사용할 수 있으며 이와 같은 코드로 onclick 속성을 편집하십시오 .

<a onclick="document.getElementById('top').scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' })">Click me</a>

여기서 인수는 클릭 후 스크롤하려는 태그 document.getElementByIdID 입니다.


감사합니다! 훌륭한 솔루션입니다
Hugo Stiven Laguna Rueda

@HugoStivenLagunaRueda 환영합니다. MDN에서 찾았으므로 Mozilla 덕분입니다. 기본적으로 지원되는 많은 항목이 이미 훌륭합니다. 나는 바닐라 JS를 좋아합니다.
지안루카 카사 티


4

이 Fiddle http://jsfiddle.net/5bNmH/1/ 에서와 같이 JS를 사용해보십시오.

페이지 바닥 글에 "맨 위로 이동"버튼을 추가하십시오.

<footer>
    <hr />
    <p>Just some basic footer text.</p>
    <!-- Go to top Button -->
    <a href="#" class="go-top">Go Top</a>
</footer>

4
function scrolltop() {

    var offset = 220;
    var duration = 500;

    jQuery(window).scroll(function() {
        if (jQuery(this).scrollTop() > offset) {
            jQuery('#back-to-top').fadeIn(duration);
        } else {
            jQuery('#back-to-top').fadeOut(duration);
        }
    });

    jQuery('#back-to-top').click(function(event) {
        event.preventDefault();
        jQuery('html, body').animate({scrollTop: 0}, duration);
        return false;
    });
}

4

위의 답변 중 어느 것도 SharePoint 2016에서 작동하지 않습니다.

다음과 같이 수행해야합니다 : /sharepoint/195870/

var w = document.getElementById("s4-workspace");
w.scrollTop = 0;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.