JavaScriptを使用してページの一番上までスクロールしますか?


1593

JavaScriptを使用してページの上部にスクロールするにはどうすればよいですか?スクロールバーがすぐに一番上にジャンプしても望ましいです。私はスムーズなスクロールを探していません。


2019年、「このサイトはスクロールリンクのポジショニング効果を使用しているようです。これは非同期パンニングではうまく機能しない可能性があります」私のスクリプトを使用しますstackoverflow.com/a/57641938/5781320
Constantin

回答:


2172

アニメーションを変更する必要がない場合は、特別なプラグインを使用する必要はありません。ネイティブのJavaScript window.scrollToメソッドを使用するだけです。0,0を渡すと、ページがすぐに左上にスクロールされます。 。

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

パラメーター

  • x-coordは水平軸に沿ったピクセルです。
  • y座標は垂直軸に沿ったピクセルです。

176
それが私のポイントでした。スムーズなスクロールをアニメーション化する必要がない場合は、jQueryを使用する必要はありません。
daniellmb 2012年

23
jeffのコメントは正直に言って、95%の確率でブラウザーを越えて動作するようにしたい人にとってはjQueryを使用するべきです。これは、私たちが広告コードを:(遅くライブラリのオーバーヘッドを買う余裕はないので、今は純粋ジャバスクリプトをたくさん書くために持っている人から来ている
ウィル

11
この回答は質問とは関係ありません。質問が次の場合は問題ありません。ページの上部にスクロールするには、どのスクリプトとメソッドを使用すればよいですか。正しい答えはここにある:stackoverflow.com/questions/4147112/...
skobaljic

2
Firefox 40とChrome 44で私のために働いている(Mikhailのコメントに対応するため)
tony

10
ページの一番下までスクロールしますwindow.scrollTo(0, document.body.scrollHeight);
emix 2016年

1346

スムーズなスクロールが必要な場合は、次のようにしてください。

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

それはその<a>タグを取りhref="#top"、上にスムーズにスクロールします。


+1。私はちょうどこのようなことをする方法を考えていて、グーグルは私をここに導きました。QUestion、しかし、ドキュメントの「scrollTop」関数はどこにありますか?見ただけで見つかりませんでした。
sqram 2009

22
scrollTopは機能ではなく、ウィンドウ要素のプロパティです
Jalal El-Shaer

1
animateの完全なコールバックを使用すると、2回実行されるため、これは正しく機能しません。
デビッドモラレス

5
「html」と「body」はどちらもブラウザの互換性に必要です。つまり、Chrome v27は「body」だけでスクロールし、IE8は必要ありません。IE8は「html」だけでスクロールしますが、Chrome v27はそうしません。
SushiGuy 2013年

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


ScrollOptions(特定のブラウザーの)のサポートをポリフィルする必要がある場合があります:github.com/iamdustan/smoothscroll
jneuendorf

私はこのソリューションがとても好きです。
SuperManEver 2018

誰かがSafariまたはInternet Explorerでこれをテストして、正常に機能しているかどうかを確認できますか?ありがとう
Fabio Magarelli

1
@FabioMagarelli Safariで正常に動作し、IEではテストされていません。参考までに、Safariでテストするには、スクロールのある任意のページを開き、上記のコードをコピーして開発者ツールに貼り付けます。
ガネーシュガラメ

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="#"> Top </a>」を使用して、ページの上部にジャンプします。
Bakanekobrain 2013

3
これは、SPAを処理する場合に最適な方法のようです
Phil

いいね!スムーズにスクロールする方法はありますか?
stallingOne 2015

65

これらの提案はすべて、さまざまな状況に適しています。このページを検索で見つけた人のために、これを試すこともできます。JQuery、プラグインなし、要素までスクロール。

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

47

スムーズスクロール、純粋なJavaScript:

(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 2016年

あなたが期間中に文字列を使用することはできませんanimate機能を、代わりにあなたが使用する必要があります: $('html, body').animate({scrollTop:(scroll_pos)}, 2000);
ケニーAlvizuris

1
かっこで0を囲む意味は何ですか?((0))は、単純に0に評価されます
ジャック・バイアル

はい、@ジャック、できます。
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ライブラリなし、単純なJavaScript。賞賛
user2840467

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
模倣は...ユーザーの答え...これはトップ2の回答だけをまとめたものです....見る
ローランB

これは、stackoverflowを使用する正当な方法です。1か所に置く方が現実的です。Joel Spolskyは、ある時点でstackoverflowがどのように機能するかを示す例として、既存の回答の再利用を使用しました。興味があれば、ブログ記事を見つけてみてください
エドガーH

26

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を使用
しています。これは、クライアントが[今すぐ予約]ボタンをクリックし、レンタル期間が選択されていない場合に、カレンダーが表示されている上部にゆっくりと移動し、次を指すダイアログdivを開きます。 2つのフィールド、3秒後にフェードします


htmlとbodyの両方をターゲットにする必要があることを指摘していただきありがとうございます。私はそれをhtmlに対してのみ実行していて、なぜそれがChromeで機能しないのか疑問に思いました。
Jared

ボディアニメーションはSafariでも機能するので、それに応じて回答を更新します。
Dave DuPlantis、

46
3つのブラウザすべてをテストしました」?みどり、LuaKit、Konquerorですよね?:p
Anko

14
2行を追加する代わりに、$( 'html'、 'body')。animate({scrollTop:0})を実行しないのはなぜですか?
マットスミス

23

多く ユーザーはそうのように、クロスブラウザの互換性のためにhtmlと体タグの両方を選択するお勧めします。

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

ただし、コールバックが1回だけ実行されることを期待している場合は、これによってつまずく可能性があります。2つの要素を選択したため、実際には2回実行されます。

それがあなたにとって問題であるなら、あなたはこのようなことをすることができます:

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 2015

ナビゲーションベースのソリューションは避けてください。Sriramajeyamの回答に関するコメントを参照してください。
Andrew Grothe 2016年

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

Webページでは、すべてのユーザーが上スクロールボタンをクリックしてから、ページをアニメーションで上から上にスクロールします。
arvinda kumar 2018

jquery scroll()の代わりにanimate()を使用する理由
Akin Hwan


14

$(document).scrollTop(0); も動作します。


2
Firefoxを使用しない場合、これは機能しないことに注意してください。引数を1つだけ指定するとエラーが発生します(エラー:引数が足りません[nsIDOMWindow.scrollTo])。
ハスキー

14

非jQueryソリューション/純粋なJavaScript:

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


10

このコードを試してください:

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

div =>スクロールを移動するDom要素。

時間=>ミリ秒。スクロールの速度を定義します。


9

純粋な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;
    }
}


8

JQueryは必要ありません。単にあなたはスクリプトを呼び出すことができます

window.location = '#'

「トップに戻る」ボタンをクリックしたとき

サンプルデモ:

output.jsbin.com/fakumo#

PS:angularjsのような最新のライブラリを使用している場合は、このアプローチを使用しないでください。これはURLのハッシュバンを壊したかもしれません。


9
残念ながら、その場合はページをスクロールする代わりに物理的に場所を変更するため、これは最良の解決策ではありません。場所が重要である場合(Angularルーティングを使用する場合など)に問題が発生する可能性があります
Yaroslav Rogoza

2
@YaroslavRogozaは正しいです。単純なケースでうまくいくかもしれませんが、このソリューションはお勧めしません。場所はますます重要になり、単一ページのアプリはナビゲーションを処理するためにハッシュを広範囲に使用します。この後にハッシュベースのナビゲーションを追加するか、これにハッシュベースのナビゲーションを追加すると、すぐに副作用バグが発生します。
Andrew Grothe 2016年

8

このスクリプトを使用して、直接トップにスクロールします。

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

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を使用して1つのクリックをアニメーション化したいが、アニメーションなしで別のアニメーションを実行したい場合はどうでしょうか。つまり、ページの上部にあるスライドイン管理ログインパネルを開き、すぐに上部に移動して表示します。


6

動機

このシンプルなソリューションはネイティブで機能し、任意の位置へのスムーズなスクロールを実装します。

#私の意見では、セクションにリンクする場合に便利ですが、特に2つの異なるURLを指すトップにポイントする場合に、特定の状況ではそれほど快適ではないアンカーリンク(が付いているリンク)の使用を避けます同じ場所(http://www.example.orgおよびhttp://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.getElementByIdは、クリック後にスクロールするタグのIDです。


ありがとうございます!は素晴らしい解決策です
Hugo Stiven Laguna Rueda

@HugoStivenLagunaRuedaさん、MDNで見つけました。Mozillaに感謝します。ネイティブにサポートされているものがすでにいくつあるかは素晴らしいです。バニラJSが大好きです。
ジャンル

5

#someidなどのリンクからのターゲットを使用できます。#someidはdivのIDです。

または、これをよりエレガントにするスクロールプラグインをいくつでも使用できます。

http://plugins.jquery.com/project/ScrollToは一例です。


4

このフィドル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;
    });
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.