jQueryページ/ iframeの一番下までスクロール


224

jqueryを使用して、iframeまたはページの一番下まで右にスクロールするにはどうすればよいですか?

回答:


360

素敵な遅いアニメーションスクロールが必要な場合は、href="#bottom"このアンカーを使用すると、下にスクロールされます。

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

セレクタは自由に変更してください。


48
これはFirefox 3.5.7では機能しますが、Chrome 4.0.295.0では機能しません。次はChromeで機能します:$( 'html、body')。animate({scrollTop:$(document).height()}、 'slow');
Tom

1
@トム、私はあなたのソリューションとマークの違いを見つけることができません!
Muhammad Gelbana 2014

4
@MuhammadGelbanaは編集日を確認してください。マークはトムの修正を含めるために彼の答えを更新したようです。
ポールパーカー

実際には、要素の高さを取得する必要がありません:stackoverflow.com/a/44578849/1450294は
マイケルScheper

210

scrollTop()は、スクロール可能領域からビューに表示されないピクセル数を返すため、次のように指定します。

$(document).height()

実際にはページの下部をオーバーシュートします。スクロールがページの下部で実際に「停止」するには、ブラウザウィンドウの現在の高さを引く必要があります。これにより、必要に応じてイージングを使用できるようになるため、次のようになります。

$('html, body').animate({ 
   scrollTop: $(document).height()-$(window).height()}, 
   1400, 
   "easeOutQuint"
);

29
これは受け入れられる答えである必要があります。トムは完全に正しいです。スクロールがイージングの終了を処理する代わりに突然停止するため、受け入れられた答えはうまく機能しません。
クリスチャン

33
注:easeOutQuintプラグインが必要です。jQuery自体にはlinearおよびしかありませんswing
ニューイングランド人

これは良いものです!ありがとう。「easeoutquint」の代わりに「swing」を使用してこれを行っても、顕著な違いが見られます」。
ジェシーヘッド

不正な形式かどうかはわかりませんが、受け入れた回答を編集して、この回答へのポインタを追加しました。そうであれば、誰かがそれを元に戻すことができます。
xaxxon、

このソリューションは、ページが標準の準拠モードで解釈される場合にのみ機能します。たとえば、あなたが含まれていない場合は<!DOCTYPE html>クロームでは、Chromeがまったく同じウィンドウの値と、ドキュメントの高さを返し、ケースがいるだろう$(document).height()-$(window).height()いつもここで0参照を返します。stackoverflow.com/questions/12103208/...を
VKK


14

このスレッドが私の特定のニーズのために私のためにうまくいかなかった後(特定の要素、私の場合はテキストエリア内でスクロール)、私はこのことを大いに超えて発見しました、これはこの議論を読んでいる他の誰かに役立つかもしれません:

planetcloudの代替

私はすでにjQueryオブジェクトのキャッシュバージョンを持っているため(myPanel以下のコードのjQueryオブジェクトです)、イベントハンドラーに追加したコードは次のとおりです。

myPanel.scrollTop(myPanel[0].scrollHeight - myPanel.height());

(ベンに感謝)


1
divを使用して私のために働きました:var d = $('#mydiv'); d.scrollTop (d[0].scrollHeight - d.height ());
gregn3 2015年

あなたは実際に数学をしなければなりませんか?stackoverflow.com/a/44578849/1450294
Michael Scheper

4

ページ全体の下部にジャンプする(瞬時にスクロールする)単純な関数。組み込みのを使用し.scrollTop()ます。私はこれを個々のページ要素で動作するように適応させることを試みていません。

function jumpToPageBottom() {
    $('html, body').scrollTop( $(document).height() - $(window).height() );
}

2
理由はわかりませんが、Firefox 26.0ではこれが機能せず、この関数を実行すると一番上までスクロールしました。この問題は、こう言って解決されました$(document).scrollTop($(document).height());
Jack

2

これは私のために働きました:

var elem = $('#box');
if (elem[0].scrollHeight - elem.scrollTop() == elem.outerHeight()) {
  // We're at the bottom.
}

これは質問の答えにはなりません
huyz

2

アニメーションを気にしない場合は、要素の高さを取得する必要はありません。少なくとも、私が試したすべてのブラウザscrollTopで、最大値よりも大きい数値を指定した場合は、一番下までスクロールします。だからそれを可能な限り最大の数を与える:

$(myScrollingElement).scrollTop(Number.MAX_SAFE_INTEGER);

スクロールバーのある要素ではなく、ページをスクロールしたい場合はmyScrollingElement、 'body、html'に等しくします。

これをいくつかの場所で行う必要があるので、次のように、それをより便利にするためにすばやく簡単なjQuery関数を作成しました。

(function($) {
  $.fn.scrollToBottom = function() {
    return this.each(function (i, element) {
      $(element).scrollTop(Number.MAX_SAFE_INTEGER);
    });
  };
}(jQuery));

だから私はbuncho 'のものを追加するときにこれを行うことができます:

$(myScrollingElement).append(lotsOfHtml).scrollToBottom();

0

以前の回答で言及されたスクリプト、たとえば:

$("body, html").animate({
    scrollTop: $(document).height()
}, 400)

または

$(window).scrollTop($(document).height());

CSSのタグにプロパティが設定されている場合Chrome では機能せずSafari ジャンプします。理解するのに1時間近くかかりました。htmloverflow: auto;


0
$('.block').scrollTop($('.block')[0].scrollHeight);

このコードを使用して、新しいメッセージが到着したときにチャットをスクロールします。


特に他の人に関係のないCSSクラスを使用して、独自のコードベースからコピーする場合は、コードの説明を含めてください;)
Bruno Monteiro

スクロールバーで任意のブロックをとります;)またはドキュメント全体。
АлександрЛиссов
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.