ページの一番下まで自動的にスクロール


415

質問のリストがあるとしましょう。最初の質問をクリックすると、自動的にページの一番下に移動します。

実際のところ、これはjQueryを使用して実行できることを知っています。

それで、この質問への回答を見つけることができるドキュメントやリンクを提供していただけませんか?

編集:ページの下部にある特定のHTML 要素までスクロールする必要があります


回答:


807

jQueryは必要ありません。Google検索で得られた上位の結果のほとんどは、次のような答えを与えてくれました。

window.scrollTo(0,document.body.scrollHeight);

ネストされた要素がある場合、ドキュメントがスクロールしない場合があります。この場合、スクロールする要素を対象とし、代わりにそのスクロールの高さを使用する必要があります。

window.scrollTo(0,document.querySelector(".scrollingContainer").scrollHeight);

あなたはそれをonclickあなたの質問のイベント(すなわち<div onclick="ScrollToBottom()" ...)に結びつけることができます。

あなたが見ることができるいくつかの追加のソース:


29
私のために働いていませんでした。私はこれをしました:element.scrollTop = element.scrollHeight
Esamo

7
2016年5月4日:「scrollTo」機能は試験的なものであり、すべてのブラウザで機能するわけではないことに注意してください。
corgrath 2016年

1
scrolltoは私のブラウザでは動作しませんでした、私は以下のリンクに出くわしたstackoverflow.com/questions/8917921/...ソリューションは、私が試したブラウザ間で動作するため、非常に便利です。
user3655574 2017

別の要素の場合、これは実用的なソリューションです:document.querySelector( "。scrollingContainer")。scrollTo(0、document.querySelector( "。scrollingContainer")。scrollHeight);
mPrinC 2018年

下にスクロールするには、html、ボディの高さを100%に設定する必要がある
かもしれ

106

ページ全体を一番下までスクロールしたい場合:

var scrollingElement = (document.scrollingElement || document.body);
scrollingElement.scrollTop = scrollingElement.scrollHeight;

JSFiddleサンプルを参照してください

要素を一番下までスクロールしたい場合:

function gotoBottom(id){
   var element = document.getElementById(id);
   element.scrollTop = element.scrollHeight - element.clientHeight;
}

そしてそれはそれがどのように機能するかです:

ここに画像の説明を入力してください

参照:scrollTopscrollHeightclientHeight

更新: Chromeの最新バージョン(61以降)およびFirefoxは、本文のスクロールをサポートしていません。https //dev.opera.com/articles/fixing-the-scrolltop-bug/を参照してください。


このソリューションはChrome、Firefox、Safari、IE8 +で動作します。詳細については、このリンクをチェックしてくださいquirksmode.org/dom/w3c_cssom.html
Tho

1
@luochenhuan、「document.body」の代わりに「document.scrollingElement」を使用してサンプルコードを修正しました。上記を参照してください
David Avsajanishvili 2018

58

バニラJS実装:

element.scrollIntoView(false);

https://developer.mozilla.org/en-US/docs/Web/API/element.scrollIntoView


3
jQueryの場合$( '#id')[0] .scrollIntoView(false);
alexoviedo999 2014年

4
現時点ではそれだけでいえFirefoxの
TIM-我々

現在、Chromeの新しいバージョンで機能しますが、追加のオプションの一部(スムーズスクロールなど)はまだ実装されていないようです。
Matt Zukowski、2016

ページの最後に空のdivを追加し、そのdivのIDを使用しました。完璧に働きました。
Nisba 2018年

5
さらに良い:element.scrollIntoView({behavior: "smooth"});
ブロンド、

26

これを使用して、アニメーション形式でページを下に移動できます。

$('html,body').animate({scrollTop: document.body.scrollHeight},"fast");

23

以下はクロスブラウザソリューションです。Chrome、Firefox、Safari、IE11でテスト済み

window.scrollTo(0, document.body.scrollHeight || document.documentElement.scrollHeight);

window.scrollTo(0、document.body.scrollHeight); 少なくともFirefox 37.0.2では、Firefoxでは機能しません


1
それはないのFirefox 62.0.3での作業を、彼らはそれを固定したとき、私は何の手掛かりを得なかっました。
zb226

12

時々、ページがスクロールしてbuttomまで(例えば、ソーシャルネットワークで)、最後までスクロールして(ページの最後のbuttom)私はこのスクリプトを使用します。

var scrollInterval = setInterval(function() { 
    document.documentElement.scrollTop = document.documentElement.scrollHeight;
}, 50);

また、ブラウザのJavaScriptコンソールを使用している場合は、スクロールを停止できると便利な場合があるため、以下を追加します。

var stopScroll = function() { clearInterval(scrollInterval); };

そしてを使用しますstopScroll();

特定の要素にスクロールする必要がある場合は、以下を使用します。

var element = document.querySelector(".element-selector");
element.scrollIntoView();

または、特定の要素に自動スクロールするためのユニバーサルスクリプト(またはページのスクロール間隔を停止する):

var notChangedStepsCount = 0;
var scrollInterval = setInterval(function() {
    var element = document.querySelector(".element-selector");
    if (element) { 
        // element found
        clearInterval(scrollInterval);
        element.scrollIntoView();
    } else if((document.documentElement.scrollTop + window.innerHeight) != document.documentElement.scrollHeight) { 
        // no element -> scrolling
        notChangedStepsCount = 0;
        document.documentElement.scrollTop = document.documentElement.scrollHeight;
    } else if (notChangedStepsCount > 20) { 
        // no more space to scroll
        clearInterval(scrollInterval);
    } else {
        // waiting for possible extension (autoload) of the page
        notChangedStepsCount++;
    }
}, 50);

letサイズ=($( "div [class * = 'card-inserted']"))。length; ($( "div [class * = 'card-inserted']"))[size -1] .scrollIntoView();
nobjta_9x_tq 2018

11

この関数は、呼び出す必要がある場合はいつでも使用できます。

function scroll_to(div){
   if (div.scrollTop < div.scrollHeight - div.clientHeight)
        div.scrollTop += 10; // move down

}

jquery.com:ScrollTo


私にとって、document.getElementById('copyright').scrollTop += 10(最新のChromeでは)動作しません...ゼロのままです
カイルベイカー

10

アニメーションでもこれができます。とてもシンプルです

$('html, body').animate({
   scrollTop: $('footer').offset().top
   //scrollTop: $('#your-id').offset().top
   //scrollTop: $('.your-class').offset().top
}, 'slow');

助けてくれてありがとう、ありがとう


7

下にスムーズにスクロールする1つのライナー

window.scrollTo({ left: 0, top: document.body.scrollHeight, behavior: "smooth" });

上にスクロールするにはtop0


4

link要素のidreference属性hrefにany を付けることができます:

<a href="#myLink" id="myLink">
    Click me
</a>

上記の例では、ユーザーがClick meページの下部をクリックすると、ナビゲーションはClick meそれ自体に移動します。


URLが変更され、角度のあるアプリが別のアプリにリダイレクトされるため、これは私には適していませんでした。
heman123 2017

3

Gentle Anchorsは、すばらしいJavaScriptプラグインを試すことができます。

例:

function SomeFunction() {
  // your code
  // Pass an id attribute to scroll to. The # is required
  Gentle_Anchors.Setup('#destination');
  // maybe some more code
}

互換性テスト済み:

  • Mac Firefox、Safari、Opera
  • Windows Firefox、Opera、Safari、Internet Explorer 5.55以降
  • Linuxはテストされていませんが、少なくともFirefoxでは問題ありません

3

パーティーには遅れますが要素を一番下までスクロールするための簡単なJavaScript専用コードを次に示します。

function scrollToBottom(e) {
  e.scrollTop = e.scrollHeight - e.getBoundingClientRect().height;
}

3

Seleniumで下にスクロールするには、以下のコードを使用します。

下部のドロップダウンまで、ページの高さまでスクロールします。JavaScriptとReactの両方で正常に動作する以下のJavaScriptコードを使用します。

JavascriptExecutor jse = (JavascriptExecutor) driver; // (driver is your browser webdriver object) 
jse.executeScript("window.scrollBy(0,document.body.scrollHeight || document.documentElement.scrollHeight)", "");

3

ドキュメントの高さを計算しようとすると、非常に多くの答えがあります。しかし、それは私には正しく計算されていませんでした。ただし、これらは両方とも機能しました。

jquery

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

または単にjs

    window.scrollTo(0,9999);

笑って「動いた」。ドキュメントがより長い場合どうなり9999ますか?
Dan Dascalescu

1
@DanDascalescu 99999
アンドリュー

2

これが私の解決策です:

 //**** scroll to bottom if at bottom

 function scrollbottom() {
    if (typeof(scr1)!='undefined') clearTimeout(scr1)   
    var scrollTop = (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop;
    var scrollHeight = (document.documentElement && document.documentElement.scrollHeight) || document.body.scrollHeight;
    if((scrollTop + window.innerHeight) >= scrollHeight-50) window.scrollTo(0,scrollHeight+50)
    scr1=setTimeout(function(){scrollbottom()},200) 
 }
 scr1=setTimeout(function(){scrollbottom()},200)

そこに何が起こっているのですか?ソリューションを説明してもらえますか?コードのみの回答はお勧めしません。
Dan Dascalescu

0

これは下へのスクロールを保証します

ヘッドコード

<script src="http://code.jquery.com/jquery-1.8.1.min.js"></script>
<script language="javascript" type="text/javascript">
function scrollToBottom() {
  $('#html, body').scrollTop($('#html, body')[0].scrollHeight);
}
</script>

ボディコード

<a href="javascript:void(0);" onmouseover="scrollToBottom();" title="Scroll to Bottom">&#9660; Bottom &#9660;</a>

0

写真は千の言葉に値します:

キーは次のとおりです。

document.documentElement.scrollTo({
  left: 0,
  top: document.documentElement.scrollHeight - document.documentElement.clientHeight,
  behavior: 'smooth'
});

要素document.documentElementであるを使用してい<html>ます。これはを使用windowするのと同じですが、ページ全体ではなくコンテナの場合、変更してdocument.bodydocument.documentElementを除いてこのように機能するため、この方法を使用するのは個人的な好みですdocument.querySelector("#container-id")

例:

let cLines = 0;

let timerID = setInterval(function() {
  let elSomeContent = document.createElement("div");

  if (++cLines > 33) {
    clearInterval(timerID);
    elSomeContent.innerText = "That's all folks!";
  } else {
    elSomeContent.innerText = new Date().toLocaleDateString("en", {
      dateStyle: "long",
      timeStyle: "medium"
    });
  }
  document.body.appendChild(elSomeContent);

  document.documentElement.scrollTo({
    left: 0,
    top: document.documentElement.scrollHeight - document.documentElement.clientHeight,
    behavior: 'smooth'
  });

}, 1000);
body {
  font: 27px Arial, sans-serif;
  background: #ffc;
  color: #333;
}

ない場合は、違いを比較できますscrollTo()


0

特定の要素を下にスクロールしたい場合の簡単な方法

下にスクロールしたいときはいつでもこの関数を呼び出します。

function scrollDown() {
 document.getElementById('scroll').scrollTop =  document.getElementById('scroll').scrollHeight
}
ul{
 height: 100px;
 width: 200px;
 overflow-y: scroll;
 border: 1px solid #000;
}
<ul id='scroll'>
<li>Top Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Something Here</li>
<li>Bottom Here</li>
<li style="color: red">Bottom Here</li>
</ul>

<br />

<button onclick='scrollDown()'>Scroll Down</button>


これは単純ではなく、scroll要素を作成する必要があります。
Dan Dascalescu

@DanDascalescuそうです!しかし、私のコードは機能しますが、反対票を投じる価値はないと思います
Shrroy

「作品」だけでは十分ではありません。このページのすべてのソリューションはある程度「機能」します。そして、それらのトンがあります。読者はどのように決定すべきですか?
Dan Dascalescu

0

私は動的コンテンツを備えたAngularアプリを持っていて、上記の回答のいくつかを試してみましたが、あまり成功していません。私は@Konardの答えを適応させ、私のシナリオのためにそれをプレーンJSで動作させました:

HTML

<div id="app">
    <button onClick="scrollToBottom()">Scroll to Bottom</button>
    <div class="row">
        <div class="col-md-4">
            <br>
            <h4>Details for Customer 1</h4>
            <hr>
            <!-- sequence Id -->
            <div class="form-group">
                <input type="text" class="form-control" placeholder="ID">
            </div>
            <!-- name -->
            <div class="form-group">
                <input type="text" class="form-control" placeholder="Name">
            </div>
            <!-- description -->
            <div class="form-group">
                <textarea type="text" style="min-height: 100px" placeholder="Description" ></textarea>
            </div>
            <!-- address -->
            <div class="form-group">
                <input type="text" class="form-control" placeholder="Address">
            </div>
            <!-- postcode -->
            <div class="form-group">
                <input type="text" class="form-control" placeholder="Postcode">
            </div>
            <!-- Image -->
            <div class="form-group">
                <img style="width: 100%; height: 300px;">
                <div class="custom-file mt-3">
                    <label class="custom-file-label">{{'Choose file...'}}</label>
                </div>
            </div>
            <!-- Delete button -->
            <div class="form-group">
                <hr>
                <div class="row">
                    <div class="col">
                        <button class="btn btn-success btn-block" data-toggle="tooltip" data-placement="bottom" title="Click to save">Save</button>
                        <button class="btn btn-success btn-block" data-toggle="tooltip" data-placement="bottom" title="Click to update">Update</button>
                    </div>
                    <div class="col">
                        <button class="btn btn-danger btn-block" data-toggle="tooltip" data-placement="bottom" title="Click to remove">Remove</button>
                    </div>
                </div>
                <hr>
            </div>
        </div>
    </div>
</div>

CSS

body {
    background: #20262E;
    padding: 20px;
    font-family: Helvetica;
}

#app {
    background: #fff;
    border-radius: 4px;
    padding: 20px;
    transition: all 0.2s;
}

JS

function scrollToBottom() {
    scrollInterval;
    stopScroll;

    var scrollInterval = setInterval(function () {
        document.documentElement.scrollTop = document.documentElement.scrollHeight;
    }, 50);

    var stopScroll = setInterval(function () {
        clearInterval(scrollInterval);
    }, 100);
}

最新のChrome、FF、Edge、および標準のAndroidブラウザーでテストされています。ここにフィドルがあります:

https://jsfiddle.net/cbruen1/18cta9gd/16/


-1
getDocHeight: function() {
  var D = document;
  return Math.max(
    D.body.scrollHeight,
    D.documentElement.scrollHeight,
    D.body.offsetHeight,
    D.documentElement.offsetHeight,
    D.body.clientHeight,
    D.documentElement.clientHeight
  );
}

document.body.scrollTop = document.documentElement.scrollTop = this.getDocHeight();


-1

Angularを検索している場合

下にスクロールするだけで、これをdivに追加できます

 #scrollMe [scrollTop]="scrollMe.scrollHeight"

   <div class="my-list" #scrollMe [scrollTop]="scrollMe.scrollHeight">
   </div>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.