JavaScript kullanarak sayfanın en üstüne kaydırılsın mı?


1592

JavaScript kullanarak sayfanın üstüne nasıl geçebilirim? Kaydırma çubuğu anında üste sıçrasa bile arzu edilir. Düzgün bir kaydırma aramıyorum.


2019'dan kaçınmak için “Bu site kaydırma bağlantılı bir konumlandırma efekti kullanıyor gibi görünüyor. Bu, eşzamansız kaydırma ile iyi çalışmayabilir ”komutumu kullan stackoverflow.com/a/57641938/5781320
Constantin

Yanıtlar:


2171

Canlandırmak için değişikliğe ihtiyacınız yoksa, herhangi bir özel eklenti kullanmanıza gerek yoktur - sadece yerel JavaScript penceresini kullanırım. ScrollTo yöntemi - 0,0 değerini geçmek sayfayı anında sol üste kaydırır .

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

Parametreler

  • x-coord, yatay eksen boyunca pikseldir.
  • y-coord, dikey eksen boyunca pikseldir.

176
Bu benim açımdan, pürüzsüz kaydırmayı canlandırmanız gerekmiyorsa, jQuery kullanmanıza gerek yok.
daniellmb

22
Komik olarak jeff'in yorumu dürüstçe sadece şeyler çapraz tarayıcı çalışmak isteyen insanlar için zamanın% 95'i sadece jQuery kullanmalıdır. Biz reklam kodunu yavaşlatan bir kütüphanenin yükü göze alamaz çünkü bu :( şu an saf javascript bir sürü yazması gereken birinden geliyor
Will

11
Bu cevabın soru ile ilgisi yoktur. Sorunun şu olması iyi olur: Sayfanın en üstüne kaydırmak için hangi komut dosyasını ve yöntemleri kullanmalıyım? Doğru cevap burada: stackoverflow.com/questions/4147112/…
skobaljic

2
Firefox 40 ve Chrome 44'te benim için çalışıyor (Mikhail'in yorumuna hitap etmek için)
tony

10
Sayfanın en altına gidinwindow.scrollTo(0, document.body.scrollHeight);
emix

1345

Düzgün kaydırma istiyorsanız, böyle bir şey deneyin:

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

Bu, herhangi bir <a>etiketi alır href="#top"ve pürüzsüz bir şekilde yukarı kaydırır.


+1. Sadece böyle bir şeyin nasıl yapılacağını merak ediyordum ve google beni buraya yönlendiriyor. Sorgu olsa da, belgelerde "scrollTop" işlevi nerede? Sadece baktım ama bulamadım.
00'da sqram

22
scrollTop işlev değil, pencere öğesinin bir özelliğidir
Jalal El-Shaer

1
Bu, animate'in tam geri aramasını kullanırken doğru şekilde çalışmaz, çünkü iki kez çalışacaktır.
David Morales

5
Tarayıcı uyumluluğu için "html" ve "body" gereklidir, yani Chrome v27 yalnızca "body" ile kayar ve IE8 gerektirmez. IE8 sadece "html" ile kayar, ancak Chrome v27 yapmaz.
SushiGuy

1
@jalchr Aslında, window.pageYOffsetpencere e̶l̶e̶m̶e̶n̶t̶ nesnesinin malıdır.
Alex W

176

Üstte ilerlemek için bunu deneyin

<script>
 $(document).ready(function(){
    $(window).scrollTop(0);
});
</script>

bu aynıdır: if (geçmişte 'scrollRestoration') {history.scrollRestoration = 'manual'; }
Vasilii Suricov

123

Akıcı animasyonla daha iyi çözüm:

// this changes the scrolling behavior to "smooth"
window.scrollTo({ top: 0, behavior: 'smooth' });

Referans: https://developer.mozilla.org/tr-TR/docs/Web/API/Window/scrollTo#Example


Yine de ScrollOptions(belirli tarayıcılar için) çoklu
jneuendorf

Bu çözümü çok seviyorum.
SuperManEver

Birisi bunu Safari'de veya Internet Explorer'da test edebilir ve iyi çalışıp çalışmadığını görebilir mi? Teşekkürler
Fabio Magarelli

1
@FabioMagarelli Safari'de iyi çalışıyor, IE'de test edilmedi. Safari'de test etmek için FYI, Geliştirici Araçları -> Konsol'da yukarıdaki kodu doğrulanmış olarak yukarı kaydırır (Safari Sürüm 13.0.5).
Ganesh Ghalame

104

Bunu yapmak için jQuery gerekmez. Standart bir HTML etiketi yeterli olacaktır ...

<div id="jump_to_me">
    blah blah blah
</div>

<a target="#jump_to_me">Click Here To Destroy The World!</a>

12
+1 Bu, yalnızca en üste değil belirli bir öğeye gitmeniz gerektiğinde iyidir.
Ish

38
Sayfanın en üstüne atlamak için '<a href="#"> Üst </a>' ü kullanın.
Bakanekobrain

3
Bu SPA ile uğraşırken gitmek için en iyi yol gibi görünüyor
Phil

Güzel! Düzgün kaydırma yapmanın bir yolu var mı?
stallingOne

65

Tüm bu öneriler çeşitli durumlar için harika çalışıyor. Bir aramadan bu sayfayı bulmak isteyenler için, biri de verebilir bu deneyin. JQuery, eklenti yok, öğeye ilerleyin.

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

47

pürüzsüz kaydırma, saf 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>

Düzenle:

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

Üst ve sol kenar boşluğuna sahip başka bir kaydırma:

window.scrollTo({ top: 100, left: 100, behavior: 'smooth' });

4
Animasyon işlevinde dize olarak sürenin çalıştığından emin misiniz?
yogesh

animate$('html, body').animate({scrollTop:(scroll_pos)}, 2000);
İşlevdeki

1
Parantez içinde 0'ı sarmanın anlamı nedir? ((0)) sadece 0 olarak değerlendirilecektir.
Jack Vial

Evet @ Jack, yapabilirsin.
Kamlesh

29
<script>

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

html'de

<a href="#top">go top</a>

28

Gerçekten garip: Bu soru beş yıldır aktif ve kaydırmayı canlandırmak için hala vanilya JavaScript yanıtı yok ... İşte burada:

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)

İsterseniz, bunu bir işlevde sarabilir ve onclicköznitelik yoluyla çağırabilirsiniz . Bu jsfiddle'ı kontrol edin

Not: Bu çok temel bir çözümdür ve belki de en performanslı çözüm değildir. Çok ayrıntılı bir örnek burada bulunabilir: https://github.com/cferdinandi/smooth-scroll


6
Soru açıkça bir jQuery çözümü ister. çok garip değil
Will

2
Benim için en iyi çözüm. Eklenti yok, hantal jquery kütüphanesi yok sadece javascript. Kudos
user2840467

Dostum, ben de aynı mantığı 5 yıl sonra yarattım, tam olarak aynı mantık, sadece değerler farklıdır, aralık süresi ve çıkartmak için kullandığımız tamsayı XD'ye inanamaz. TBH, cevaplamak için buraya geldi ama zaten orada çok cevabını oyladı.
Germa Vinsmoke

27

Düzgün kaydırma yapmak istiyorsanız, lütfen şunu deneyin:

$("a").click(function() {
     $("html, body").animate({ scrollTop: 0 }, "slow");
     return false;
});

Başka bir çözüm JavaScript window.scrollTo yöntemidir:

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

Parametreler:

  • x-değeri yatay eksen boyunca pikseldir.
  • y değeri, dikey eksen boyunca pikseldir.

7
taklitçi ... kullanıcıların cevaplarını görmek ... Bu sadece ilk 2 cevap bir derleme ....
Laurent B

yığın akışı kullanmanın meşru bir yoludur - tek bir yerde bulundurmak daha pratiktir. Joel Spolsky, stackoverflow'un bir noktada nasıl çalışacağının bir örneği olarak mevcut cevapların yeniden kullanımını kullandı. Eğer ilgileniyorsanız blog
Edgar H

26

İle window.scrollTo(0, 0);çok hızlı
yani Mark Ursino örneğini denedim, ancak Chrome'da hiçbir şey olmuyor
ve bunu buldum

$('.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);
    });
});

tüm 3 tarayıcıları test ve
blueprint css kullanıyorum çalışır
Bu bir müşteri "Şimdi rezervasyon yap" düğmesini tıkladığında ve kiralama süresi seçili değilse, yavaş yavaş takvimlerin olduğu yere üste gider ve 2 alan, 3 saniye sonra kaybolur


İşaret ettiğiniz için teşekkürler hem html hem de vücudu hedeflemeniz gerekir. Sadece html için yapıyordum ve neden Chrome'da çalışmadığını merak ediyordum.
Jared

Vücut animasyonu Safari'de çalışıyor, bu yüzden cevabınızı buna göre güncelliyoruz.
Dave DuPlantis

46
" 3 tarayıcıyı da test ettiniz mi?" Midori, LuaKit ve Konqueror, değil mi? : p
Anko

14
Neden iki satır eklemek yerine sadece $ ('html', 'body'). Animate ({scrollTop: 0}) yapmıyorsunuz?
Matt Smith

23

Bir sürü ait kullanıcı şöyle çapraz tarayıcı uyumluluğu için hem html ve vücut etiketler seçmenizi öneririz:

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

Bu, yalnızca bir kez çalışan geri aramanıza güveniyorsanız sizi uyarabilir. Aslında iki öğe çalışacak çünkü iki öğe seçtiniz.

Bu sizin için bir sorunsa, böyle bir şey yapabilirsiniz:

function scrollToTop(callback) {
    if ($('html').scrollTop()) {
        $('html').animate({ scrollTop: 0 }, callback);
        return;
    }

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

Bunun Chrome'da çalışmasının nedeni $('html').scrollTop()0 döndürür, ancak Firefox gibi diğer tarayıcılarda olmaz.

Kaydırma çubuğunun zaten üstte olması durumunda animasyonun tamamlanmasını beklemek istemiyorsanız, şunu deneyin:

function scrollToTop(callback) {
    if ($('html').scrollTop()) {
        $('html').animate({ scrollTop: 0 }, callback);
        return;
    }

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

    callback();
}

19

Yaşlılar #tophile yapabilir

document.location.href = "#top";

FF, IE ve Chrome'da iyi çalışır


Güzel! Düzgün kaydırma yapmanın bir yolu var mı?
stallingOne

navigasyon tabanlı çözümlerden kaçınmalısınız, Sriramajeyam'ın cevabı hakkındaki yorumlara bakın.
Andrew Grothe

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
Bu kod soruyu cevaplayabilirken, sorunun nasıl ve neden
çözüldüğü hakkında

Cevabını açıkla!
Ullas Hunka

Web sayfasında herhangi bir kullanıcı üst kaydırma düğmesine tıklar, ardından sayfa animasyonla üst üste kayar.
arvinda kumar

Neden jquery scroll () yerine animate ()?
Akin Hwan

14

Bunu dene

<script>
    $(window).scrollTop(100);
</script>

14

$(document).scrollTop(0); ayrıca çalışır.


2
Firefox kullanmadığınızda bunun işe yaramayacağını unutmayın. Yalnızca bir bağımsız değişken verirken hata alıyorsunuz (Hata: [nsIDOMWindow.scrollTo] yeterli bağımsız değişken yok).
Husky

14

JQuery dışı çözüm / saf JavaScript:

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


10

Bu kodu deneyin:

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

div => Dom Kaydırmayı taşımak istediğiniz öğe.

time => milisaniye, kaydırma hızını tanımlayın.


9

Saf JavaScript çözümü:

function scrollToTop() {
  window.scrollTo({
    top: 0,
    behavior: 'smooth'
});

Codepen'e animasyonlu bir çözüm yazıyorum

Ayrıca, CSS scroll-behavior: smoothözelliği ile başka bir çözüm deneyebilirsiniz .

html {
    scroll-behavior: smooth;
}

@media (prefers-reduced-motion: reduce) {
    html {
        scroll-behavior: auto;
    }
}

8

Neden JQuery dahili işlev scrollTop kullanmıyorsunuz:

$('html, body').scrollTop(0);//For scrolling to top

$("body").scrollTop($("body")[0].scrollHeight);//For scrolling to bottom

Kısa ve basit!


Sadece linki kaçırıyorsun dokümana
Cyril DUCHON-Doris

8

JQuery'ye ihtiyacınız yok. Sadece betiği arayabilirsiniz

window.location = '#'

"En üste git" düğmesini tıkladığınızda

Örnek demo:

output.jsbin.com/fakumo#

Not: Angularjs gibi modern kütüphaneleri kullanırken bu yaklaşımı kullanmayın. Bu URL hashbang kırdı olabilir.


9
Ne yazık ki, bu durumda sayfayı kaydırmak yerine konumu fiziksel olarak değiştirdiğiniz için en iyi çözüm değildir. Konum önemliyse sorunlara neden olabilir (Açısal yönlendirme vb. Kullanılıyorsa)
Yaroslav Rogoza

2
@YaroslavRogoza doğru. O iken olabilecek basit durumda iş, bu çözümü önermiyoruz. Konum gittikçe önem kazanıyor ve tek sayfalık uygulamalar gezinmeyi işlemek için hash'ı yoğun bir şekilde kullanıyor. Bundan sonra karma tabanlı gezinme eklerken ya da karma tabanlı gezinmeye bunu eklerken hemen bir yan etki hatası verirsiniz.
Andrew Grothe

8

En üste doğrudan gitmek için bu komut dosyasını kullanın.

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

7

Düzgün kaydırma istemiyorsanız, düzgün kaydırma animasyonunu başlar başlamaz hile yapabilir ve durdurabilirsiniz ... şöyle:

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

Tavsiye edilip edilmediğine dair hiçbir fikrim yok, ama işe yarıyor :)

Bunu ne zaman kullanırsın? Emin değilim, ama belki bir şeyi Jquery ile canlandırmak için bir tıklama kullanmak istediğinizde, ancak animasyon olmadan başka bir şey yapmak istediğinizde? ör. sayfanın üst kısmındaki bir slayt girişi yönetici giriş panelini açın ve görmek için anında en üste atlayın.


6

Motivasyon

Bu basit çözüm yerel olarak çalışır ve herhangi bir konuma yumuşak bir kaydırma uygular.

#Bence, bir bölüme bağlantı vermek istiyorsanız yararlı olan bağlantı bağlantılarını (bunlara sahip olanlar ) kullanmaktan kaçınır , ancak bazı durumlarda, özellikle üste işaret ederken iki farklı URL'yi gösteren aynı yer ( http://www.example.org ve http://www.example.org/# ).

Çözüm

Kaydırmak istediğiniz etikete, örneğin bu soruyu cevaplayan ilk bölümünüze bir kimlik koyun , ancak kimlik sayfanın her yerine yerleştirilebilir.

<body>
  <section id="top">
    <!-- your content -->
  </section>
  <div id="another"><!-- more content --></div>

Daha sonra bir düğme olarak bir bağlantı kullanabilirsiniz, onclick niteliğini böyle bir kodla düzenleyin .

<a onclick="document.getElementById('top').scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' })">Click me</a>

Argümanı nerede document.getElementByIdolduğu id etiketi Tıklama sonra doğru kaydırarak istiyorum.


Teşekkürler! harika bir çözüm
Hugo Stiven Laguna Rueda

@HugoStivenLagunaRueda hoş geldiniz, MDN'de buldum, bu yüzden Mozilla sayesinde. Yerel olarak desteklenen kaç şey var harika. Vanilya JS seviyorum.
Gianluca Casati


4

JS'yi bu Fiddle'daki gibi kullanmayı deneyebilirsiniz http://jsfiddle.net/5bNmH/1/

Sayfa altbilginize "En üste git" düğmesini ekleyin:

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

4

Yukarıdaki yanıtların hiçbiri SharePoint 2016'da çalışmaz.

Bunun gibi yapılması gerekir: /sharepoint/195870/

var w = document.getElementById("s4-workspace");
w.scrollTop = 0;
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.