jQuery Sayfanın altına git / iframe


224

Bir iframe veya sayfanın en altına inmek için jquery'yi nasıl kullanabilirim?

Yanıtlar:


360

Güzel bir yavaş animasyon kaydırma istiyorsanız, bununla herhangi bir çapa için href="#bottom"sizi en alta kaydırır:

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

Seçiciyi değiştirmekten çekinmeyin.


48
Bu, Firefox 3.5.7'de çalışır, ancak Chrome 4.0.295.0'da çalışmaz. Chrome'da aşağıdakiler çalışır: $ ('html, body'). Animate ({scrollTop: $ (document) .height ()}, 'slow');
Tom

1
@Tom, çözümünüz ile Mark'ın arasındaki farkı göremiyorum!
Muhammed Gelbana

4
@MuhammadGelbana düzenleme tarihini kontrol edin. Görünüşe göre Mark yanıtını Tom'un düzeltmesini içerecek şekilde güncelledi.
Paul Parker

Aslında elemanın yüksekliğini elde etmeye gerek yok: stackoverflow.com/a/44578849/1450294
Michael Scheper

210

scrollTop (), kaydırılabilir alandan görünümden gizlenen piksel sayısını döndürerek şunu verir:

$(document).height()

aslında sayfanın altını aşacaktır. Kaydırma işleminin sayfanın alt kısmında gerçekten 'durması' için tarayıcı penceresinin geçerli yüksekliğinin çıkarılması gerekir. Bu, gerektiğinde hareket hızı kullanımına izin verir, böylece olur:

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

29
Bu kabul edilen cevap olmalı, Tom kesinlikle haklı, kabul edilen cevap iyi çalışmıyor çünkü kaydırma hareketin sonunu işlemek yerine aniden durur.
Christian

33
Not: easeOutQuintbir eklenti gerektirir, jQuery sadece linearve sahiptir swing.
newenglander

ahbap bu iyi şeyler! Teşekkürler. bunu 'easeoutquint' yerine 'swing' ile yapmak bile fark edilebilir farklar gösterir.
Jesse Head

Kötü form olup olmadığından emin değilim, ancak bu cevaba bir işaretçi eklemek için kabul edilen cevabı düzenledim. Eğer öyleyse, biri geri alabilir.
xaxxon

Bu çözüm yalnızca sayfa bir standardın uyumlu modunda yorumlanırsa çalışır. Örneğin <!DOCTYPE html>, Chrome'da içermezseniz Chrome, pencere ve belge yüksekliği için tam olarak aynı değeri döndürür; bu durumda $(document).height()-$(window).height()her zaman 0 döndürür. Buraya bakın: stackoverflow.com/questions/12103208/…
VKK

35

Örneğin:

$('html, body').scrollTop($(document).height());

Bunu iţletemiyorum. Hiçbir şey yapmaz.
Adam

@adam Hangi jQuery sürümünü kullanıyorsunuz?
Sonny Boy

14

Bu konu benim için belirli bir ihtiyaç (benim durumumda bir textarea içinde kaydırma) benim için işe yaramadı sonra ben bunu ötesinde, bu tartışmayı okuyan bir başkası için yararlı olabilir büyük ötesinde öğrendim:

Planetcloud'da alternatif

Zaten benim jQuery nesnesinin önbelleğe alınmış bir sürümü vardı ( myPanelaşağıdaki kodda jQuery nesnesidir), benim olay işleyicisine eklediğim kod sadece bu oldu:

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

(teşekkürler Ben)


1
Bir div ile benim için çalıştı:var d = $('#mydiv'); d.scrollTop (d[0].scrollHeight - d.height ());
gregn3

Aslında matematik yapmak zorunda mısın? stackoverflow.com/a/44578849/1450294
Michael Scheper

4

Tüm sayfanın altına atlayan (anında kayan) basit bir işlev. Yerleşik kullanır .scrollTop(). Bunu tek tek sayfa öğeleriyle çalışacak şekilde uyarlamaya çalışmadım.

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

2
Nedenini bilmiyorum, ancak bu benim için Firefox 26.0'da işe yaramadı ve bu işlev çalıştırıldığında en üste kaydırdı. Bu sorun söyleyerek çözüldü$(document).scrollTop($(document).height());
Jack

2

Bu benim için çalıştı:

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

Bu soruya cevap vermiyor
huyz

2

Animasyonu önemsemiyorsanız, öğenin yüksekliğini elde etmeniz gerekmez. En azından denediğim tüm tarayıcılarda scrollTop, maksimumdan daha büyük bir sayı verirseniz , sadece en alta kaydırılır. Bu yüzden mümkün olan en yüksek sayıyı verin:

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

Sayfayı kaydırma çubuğuna sahip bir öğe yerine kaydırmak istiyorsanız, myScrollingElement'gövde, html' değerine eşit yapın.

Bunu birkaç yerde yapmam gerektiğinden, daha rahat hale getirmek için hızlı ve kirli bir jQuery işlevi yazdım:

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

Buncho 'şeyler eklediğimde bunu yapabilirim:

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

0

Önceki yanıtlarda bahsedilen komut dosyaları, örneğin:

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

veya

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

işe yaramaz içinde Chrome ve ürkek olacak Safari durumda html etiketinin CSS vardır overflow: auto;mülkiyet seti. Anlamak yaklaşık bir saatimi aldı.


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

Yeni mesaj geldiğinde sohbeti kaydırmak için bu kodu kullanıyorum.


Lütfen kodunuz için, özellikle kendi kod tabanınızdan kopyalarken, başkaları için geçerli olmayan CSS sınıflarını kullanarak bazı açıklamalar ekleyin;)
Bruno Monteiro

Kaydırma çubuğuyla herhangi bir bloğu alın;) veya belgenin tamamı.
Александр Лиссов
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.