Otomatik Olarak Sayfanın Altına Git


415

Bir soru listem var. İlk soruyu tıkladığımda, beni otomatik olarak sayfanın altına götürmelidir.

Nitekim, bunun jQuery kullanılarak yapılabileceğini biliyorum.

Peki, bana bu sorunun cevabını bulabileceğim bazı belgeler veya bazı bağlantılar verebilir misiniz?

DÜZENLE: Sayfanın altındaki belirli bir HTML öğesine gitmeniz gerekiyor


Yanıtlar:


807

jQuery gerekli değildir. Bir Google aramasından aldığım en iyi sonuçların çoğu bana bu yanıtı verdi:

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

Yuvalanmış öğelerinizin olduğu yerde belge kaydırılmayabilir. Bu durumda, kayan öğeyi hedeflemeniz ve bunun yerine kaydırma yüksekliğini kullanmanız gerekir.

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

Bunu onclicksorunuzun olayına bağlayabilirsiniz (örn. <div onclick="ScrollToBottom()" ...).

Göz atabileceğiniz bazı ek kaynaklar:


29
Benim için çalışmadı. Bunu yapan: element.scrollTop = element.scrollHeight.
Esamo

7
4 Mayıs 2016: "scrollTo" işlevinin deneysel olduğunu ve tüm tarayıcılarda çalışmadığını lütfen unutmayın.
corgrath

1
scrollto tarayıcımda çalışmadı, aşağıdaki linke rastladım stackoverflow.com/questions/8917921/… , çünkü çözümler denediğim tarayıcılarda çalışıyor.
user3655574

ayrı bir eleman için, bu çalışma çözümüdür: document.querySelector (". scrollingContainer"). scrollTo (0, document.querySelector (". scrollingContainer"). scrollHeight);
mPrinC

En alta kaydırmak için html, vücut yüksekliğini% 100'e ayarlamanız gerekebilir
Trever Thompson

106

Tüm sayfayı alta kaydırmak istiyorsanız:

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

Üzerindeki örneğe bakın JSFiddle

Bir öğeyi alta kaydırmak istiyorsanız:

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

İşte böyle çalışır:

resim açıklamasını buraya girin

Ref: scrollTop , scrollHeight , clientHeight

GÜNCELLEME: Chrome'un son sürümleri (61+) ve Firefox vücudun kaydırılmasını desteklemez, bkz. Https://dev.opera.com/articles/fixing-the-scrolltop-bug/


Çözüm Chrome, Firefox, Safari ve IE8 + ile çalışır. Daha fazla ayrıntı için bu bağlantıya göz atın quirksmode.org/dom/w3c_cssom.html
Tho

1
@luochenhuan, ben sadece "document.body" yerine "document.scrollingElement" kullanarak örnek kodu düzelttim, yukarıya bakın
David Avsajanishvili 17:18

58

Vanilla JS uygulaması:

element.scrollIntoView(false);

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


3
jQuery $ ('# id') ile [0] .scrollIntoView (false);
alexoviedo999

4
şu anda sadece Firefox
tim-we

Artık Chrome'un yeni sürümlerinde çalışıyor, ancak bazı ekstra seçeneklerin (yumuşak kaydırma gibi) henüz uygulanmadığı görülüyor.
Matt Zukowski

Sayfanın sonuna boş bir div ekledim ve bu div'in kimliğini kullandım. Mükemmel çalıştı.
Nisba

5
Daha da iyisi:element.scrollIntoView({behavior: "smooth"});
blalond

26

Sayfayı bir animasyon biçiminde aşağı gitmek için bunu kullanabilirsiniz.

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

23

Çapraz tarayıcı çözümü aşağıda olmalıdır. Chrome, Firefox, Safari ve IE11'de test edildi

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

window.scrollTo (0, document.body.scrollHeight); Firefox'ta çalışmıyor, en azından Firefox 37.0.2 için


1
Bu does Firefox 62.0.3 iş, ama o sabit zaman hiçbir ipucu var.
zb226

12

Bazen sayfa aşağı kaydırmak için uzanır (örneğin sosyal ağlarda), sonuna kadar aşağı kaydırmak için (sayfanın nihai alt kısmı) Bu komut dosyasını kullanıyorum:

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

Tarayıcınızın javascript konsolundaysanız, kaydırmayı durdurabilmeniz yararlı olabilir, bu nedenle ekleyin:

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

Ve sonra kullan stopScroll(); .

Belirli bir öğeye ilerlemeniz gerekiyorsa, şunları kullanın:

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

Veya belirli bir öğeye otomatik kaydırma için evrensel komut dosyası (veya sayfa kaydırma aralığını durdur):

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);

size = ($ ("div [sınıf * = 'kart takılı']")). uzunluk; ($ ("div [sınıf * = 'kart takılı']")) [boyut -1] .scrollIntoView ();
nobjta_9x_tq

11

Bu işlevi çağırmanız gereken her yerde kullanabilirsiniz:

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

}

jquery.com: ScrollTo


Benim document.getElementById('copyright').scrollTop += 10için çalışmıyor (en son Chrome'da) ... sıfır kalıyor ...
Kyle Baker

10

bunu animasyonla da yapabilirsiniz, çok basit

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

umut yardımcı olur, teşekkürler


7

alta düzgün kaydırmak için bir astar

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

Yukarı kaydırmak topiçin0


4

Bağlantı öğesinin idbaşvuru niteliğine herhangi birini ekleyebilirsiniz href:

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

Yukarıdaki örnekte, kullanıcı Click mesayfanın altını tıkladığında gezinme Click mekendi kendine gezinir .


Bu benim için yapmadı çünkü url'yi değiştirdi ve ardından açısal uygulamam başka bir şeye yönlendiriyor!
heman123

3

Nazik Çapaları deneyebilirsiniz güzel bir javascript eklentisi .

Misal:

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

Test Edilen Uyumluluk:

  • Mac Firefox, Safari, Opera
  • Windows Firefox, Opera, Safari, Internet Explorer 5.55+
  • Linux test edilmedi, ancak en azından Firefox ile iyi olmalı

3

Partiye geç, ancak herhangi bir öğeyi alta kaydırmak için bazı basit javascript kodu :

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

3

Selenium'da aşağı kaydırmak için aşağıdaki kodu kullanın:

Alt aşağı açılana kadar sayfanın yüksekliğine kadar kaydırın. Hem JavaScript hem de React için iyi çalışacak aşağıdaki javascript kodunu kullanın.

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

3

Çok fazla cevap belgenin yüksekliğini hesaplamaya çalışıyor. Ama benim için doğru hesaplamıyordu. Ancak, her ikisi de çalıştı:

jQuery

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

veya sadece js

    window.scrollTo(0,9999);

LOL "çalıştı". Belge daha uzunsa ne olur 9999?
Dan Dascalescu

1
@DanDascalescu 99999
Andrew

2

İşte benim çözümüm:

 //**** 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)

Ne ... orada neler oluyor? Çözümünüzü açıklamak ister misiniz? Yalnızca kod yanıtları önerilmez.
Dan Dascalescu

0

Bu, aşağı kaydırmayı garanti eder

Kafa Kodları

<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>

Vücut kodu

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

0

Bir resim bin kelime değerinde bir olup:

Anahtar:

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

Öğe document.documentElementolan kullanıyor <html>. Bu sadece kullanmak gibidir window, ancak tüm sayfayı değil ama bir kap, bu değiştirmek dışındaherhangi sadece bu gibi çalışır çünkü eğer o, bu şekilde bunu yapmak için sadece benim kişisel tercihi olduğunu document.bodyve document.documentElementhiç document.querySelector("#container-id").

Misal:

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;
}

Hiçbir fark yoksa farkı karşılaştırabilirsiniz scrollTo():


0

Belirli bir öğeyi aşağı kaydırmak istiyorsanız basit bir yol

Aşağı kaydırmak istediğinizde bu işlevi çağırın.

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>


Bu basit değildir ve bir scrollöğe oluşturmayı gerektirir .
Dan Dascalescu

@DanDascalescu Haklısın! ama kodum çalışıyor
Oyu

"İşler" yeterli değil. Bu sayfadaki tüm çözümler bir dereceye kadar "işe yarar". Ve bir ton var. Bir okuyucu nasıl karar vermelidir?
Dan Dascalescu

0

Dinamik içeriğe sahip Açısal bir uygulamam var ve yukarıdaki cevapların birkaçını çok fazla başarıyla denemedim. @ Konard'ın cevabını uyarladım ve senaryom için düz JS'de çalıştırdım:

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);
}

En son Chrome, FF, Edge ve stok Android tarayıcısında test edildi. İşte bir keman:

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

window.scrollTo (0,1e10);

her zaman çalışır.

1e10 büyük bir sayıdır. bu yüzden her zaman sayfanın sonu.


-1

Açısal arayan herhangi biri

aşağı kaydırmanız yeterlidir bunu div'inize ekleyin

 #scrollMe [scrollTop]="scrollMe.scrollHeight"

   <div class="my-list" #scrollMe [scrollTop]="scrollMe.scrollHeight">
   </div>
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.