Scorrere fino all'inizio della pagina utilizzando JavaScript?


1594

Come scorrere fino all'inizio della pagina usando un JavaScript? È auspicabile anche se la barra di scorrimento salta all'istante verso l'alto. Non sto cercando uno scorrimento regolare.


2019, per evitare "Questo sito sembra utilizzare un effetto di posizionamento con scorrimento. Questo potrebbe non funzionare bene con il panning asincrono ”usa il mio script stackoverflow.com/a/57641938/5781320
Constantin

Risposte:


2173

Se non è necessario animare la modifica, non è necessario utilizzare alcun plug-in speciale: utilizzerei solo il metodo nativo window.scroll JavaScript. Passando in 0,0, la pagina scorrerà all'istante in alto a sinistra all'istante .

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

parametri

  • x-coord è il pixel lungo l'asse orizzontale.
  • y-coord è il pixel lungo l'asse verticale.

176
Quello era il mio punto, se non hai bisogno di animare lo scorrimento regolare, allora non devi usare jQuery.
daniellmb

23
Divertente come il commento di Jeff è onestamente per le persone che vogliono solo che le cose funzionino su più browser il 95% delle volte dovrebbe semplicemente usare jQuery. Questo viene da qualcuno che deve scrivere un sacco di javascript puro in questo momento perché non possiamo permetterci il sovraccarico di una libreria che rallenta il codice degli annunci :(
Will

11
Questa risposta non ha nulla a che fare con la domanda. Andrebbe bene se la domanda fosse: quali script e metodi dovrei usare per scorrere fino all'inizio della pagina? Risposta corretta è qui: stackoverflow.com/questions/4147112/...
Skobaljic

2
Lavoro per me in Firefox 40 e Chrome 44 (per rispondere al commento di Mikhail)
tony

10
Scorri fino alla fine della paginawindow.scrollTo(0, document.body.scrollHeight);
emix

1347

Se vuoi uno scorrimento fluido, prova qualcosa del genere:

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

Questo prenderà qualsiasi <a>tag di cui href="#top"e renderà più fluido lo scorrimento verso l'alto.


+1. Mi stavo solo chiedendo come fare qualcosa del genere e google mi ha portato qui. DOMANDA, dov'è la funzione "scrollTop" nei documenti? Ho appena guardato ma non sono riuscito a trovarlo.
sqram

22
scrollTop non è una funzione, è una proprietà dell'elemento window
Jalal El-Shaer,

1
Questo non funziona correttamente quando si utilizza il callback completo di animate, poiché verrà eseguito due volte.
David Morales,

5
"html" e "body" sono entrambi necessari per la compatibilità del browser, ovvero Chrome v27 scorre solo con "body" e IE8 no. IE8 scorre solo con "html" ma Chrome v27 no.
SushiGuy,

1
@jalchr In realtà, window.pageYOffsetsarebbe la proprietà dell'oggetto e̶l̶e̶m̶e̶n̶t window della finestra.
Alex W,

176

Prova questo per scorrere in alto

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

questo è lo stesso: if ('scrollRestoration' nella storia) {history.scrollRestoration = 'manual'; }
Vasilii Suricov

123

Migliore soluzione con animazioni fluide:

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

Riferimento: https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollTo#Example


Potrebbe essere ancora necessario il supporto per il polyfill per ScrollOptions(per alcuni browser): github.com/iamdustan/smoothscroll
jneuendorf,

Mi piace molto questa soluzione.
SuperManEver l'

Qualcuno può testarlo su Safari o Internet Explorer e vedere se funziona bene? Grazie
Fabio Magarelli il

1
@FabioMagarelli Funziona bene su Safari, non testato su IE. Cordiali saluti per testarlo su Safari apri qualsiasi pagina che ha scorrimento e copia incolla il codice sopra in Strumenti per gli sviluppatori -> Console scorrerà verso l'alto verificato (Safari Versione 13.0.5).
Ganesh Ghalame,

104

Non hai bisogno di jQuery per farlo. Un tag HTML standard sarà sufficiente ...

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

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

12
+1 Questo è utile se devi navigare verso un elemento specifico piuttosto che verso l'alto.
Ish,

38
Utilizza "<a href="#"> Inizio </a>" per passare all'inizio della pagina.
Bakanekobrain,

3
Questo sembra essere il modo migliore per affrontare le SPA
Phil

Bello! C'è un modo per renderlo scorrevole?
stallingUn

65

Tutti questi suggerimenti funzionano perfettamente per varie situazioni. Per coloro che trovano questa pagina attraverso una ricerca, si può anche provare questo . JQuery, nessun plug-in, scorrere fino all'elemento.

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

47

scorrimento regolare, javascript puro:

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

Modificare:

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

Un altro modo di scorrere con il margine superiore e sinistro:

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

4
Sei sicuro che la durata della stringa nella funzione animata funzioni?
Yogesh

Non puoi usare una stringa per la durata nella animatefunzione, invece dovresti usare: $('html, body').animate({scrollTop:(scroll_pos)}, 2000);
Kenny Alvizuris,

1
Qual è lo scopo di racchiudere 0 tra parentesi? ((0)) valuterà semplicemente 0.
Jack Vial

Sì, Jack, puoi.
Kamlesh,

29
<script>

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

in html

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

28

Davvero strano: questa domanda è attiva da cinque anni e non esiste ancora una risposta JavaScript alla vaniglia per animare lo scorrimento ... Quindi ecco qui:

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)

Se lo desideri, puoi racchiuderlo in una funzione e chiamarlo tramite l' onclickattributo. Dai un'occhiata a questo jsfiddle

Nota: questa è una soluzione molto semplice e forse non la più performante. Un esempio molto elaborato può essere trovato qui: https://github.com/cferdinandi/smooth-scroll


6
La domanda richiede esplicitamente una soluzione jQuery però. quindi non strano
Will

2
La migliore soluzione per me. Nessun plugin, nessuna ingombrante libreria jquery solo javascript semplice. Kudos
user2840467

Amico, ho anche creato questa stessa logica XD dopo 5 anni, esattamente la stessa logica, solo i valori sono diversi come il tempo dell'intervallo e quell'intero che stiamo usando per sottrarre, non posso credere a XD. TBH, è venuto qui per rispondere ma è già lì, quindi ho votato a favore della tua risposta.
Germa Vinsmoke,

27

Se si desidera eseguire uno scorrimento regolare, provare questo:

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

Un'altra soluzione è il metodo window.scroll JavaScript:

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

Parametri:

  • il valore x è il pixel lungo l'asse orizzontale.
  • il valore y è il pixel lungo l'asse verticale.

7
copione ... vedi le risposte degli utenti ... Questa è solo una raccolta delle prime 2 risposte ....
Laurent B

questo è un modo legittimo per utilizzare StackOverflow: è più pratico averlo in un unico posto. Joel Spolsky ha usato il riutilizzo delle risposte esistenti come esempio di come dovrebbe funzionare StackOverflow in un determinato momento. Se sei interessato, posso provare a trovare il post sul blog
Edgar H,

26

Con window.scrollTo(0, 0);è molto veloce,
quindi ho provato l'esempio di Mark Ursino, ma in Chrome non succede nulla
e l'ho trovato

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

testato tutti e 3 i browser e funziona
sto usando blueprint css
questo è quando un client fa clic sul pulsante "Prenota ora" e non ha il periodo di noleggio selezionato, si sposta lentamente verso l'alto dove sono i calendari e apre una finestra di dialogo che punta a i 2 campi, dopo 3 secondi svanisce


Grazie per la segnalazione, devi scegliere come target sia html che body. Lo facevo solo per HTML e mi chiedevo perché non funzionasse in Chrome.
Jared

L'animazione del corpo funziona in Safari, quindi sto aggiornando la tua risposta di conseguenza.
Dave DuPlantis,

46
"Testati tutti e 3 i browser "? Midori, LuaKit e Konqueror, giusto? : p
Anko,

14
Perché non fare solo $ ('html', 'body'). Animate ({scrollTop: 0}) invece di aggiungere due righe?
Matt Smith,

23

Un sacco di utenti consiglia di selezionare sia i tag html e corpo per la compatibilità cross-browser, in questo modo:

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

Questo può farti inciampare se stai contando sul tuo callback in esecuzione solo una volta. In effetti verrà eseguito due volte perché hai selezionato due elementi.

Se questo è un problema per te, puoi fare qualcosa del genere:

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

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

Il motivo per cui funziona è in Chrome che $('html').scrollTop()restituisce 0, ma non in altri browser come Firefox.

Se non vuoi attendere il completamento dell'animazione nel caso in cui la barra di scorrimento sia già in alto, prova questo:

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

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

    callback();
}

19

Il vecchio #toppuò fare il trucco

document.location.href = "#top";

Funziona bene in FF, IE e Chrome


Bello! C'è un modo per renderlo scorrevole?
stallingUn

dovresti evitare soluzioni basate sulla navigazione, vedi commenti sulla risposta di Sriramajeyam.
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
Mentre questo codice può rispondere alla domanda, fornendo informazioni su come e perché risolve il problema ne migliora il valore a lungo termine
L_J

Spiega la tua risposta!
Ullas Hunka,

Nella pagina Web qualsiasi utente farà clic sul pulsante di scorrimento in alto, quindi la pagina scorrerà in alto con l'animazione.
Arvinda Kumar,

Perché animate () invece di jquery scroll ()?
Akin Hwan,

14

Prova questo

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

14

$(document).scrollTop(0); funziona anche.


2
Nota che quando non usi Firefox non funzionerà. Viene visualizzato un errore quando si fornisce solo un argomento (Errore: argomenti insufficienti [nsIDOMWindow.scrollTo]).
Husky,

14

Soluzione non jQuery / JavaScript puro:

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


10

Prova questo codice:

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

div => elemento Dom in cui si desidera spostare lo scorrimento.

time => millisecondi, definisce la velocità di scorrimento.


9

Pura soluzione JavaScript:

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

Scrivo una soluzione animata su Codepen

Inoltre, puoi provare un'altra soluzione con la scroll-behavior: smoothproprietà CSS .

html {
    scroll-behavior: smooth;
}

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

8

Perché non usi la funzione integrata JQuery scrollTop:

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

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

Breve e semplice!


Ti manca il link al documento
Cyril Duchon-Doris,

8

Non hai bisogno di JQuery. Puoi semplicemente chiamare la sceneggiatura

window.location = '#'

al clic del pulsante "Vai all'inizio"

Demo di esempio:

output.jsbin.com/fakumo#

PS: non utilizzare questo approccio quando si utilizzano librerie moderne come angularjs. Ciò potrebbe interrompere l'URL hashbang.


9
Sfortunatamente, non è la soluzione migliore poiché stai cambiando fisicamente la posizione in quel caso invece di scorrere la pagina. Ciò potrebbe causare problemi se la posizione è importante (in caso di utilizzo del routing angolare o giù di lì)
Yaroslav Rogoza

2
@YaroslavRogoza è corretto. Sebbene possa funzionare in casi semplici, non consiglierei questa soluzione. La posizione sta diventando sempre più importante e le app a pagina singola utilizzano ampiamente l'hash per gestire la navigazione. Dovresti introdurre immediatamente un bug con effetti collaterali quando aggiungi la navigazione basata su hash dopo questa o questa alla navigazione basata su hash.
Andrew Grothe,

8

Usa semplicemente questo script per scorrere verso l'alto diretto.

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

7

Se non si desidera lo scorrimento regolare, è possibile imbrogliare e interrompere l'animazione a scorrimento regolare non appena si avvia ... in questo modo:

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

Non ho idea se sia consigliato / consentito, ma funziona :)

Quando lo useresti? Non sono sicuro, ma forse quando vuoi usare un clic per animare una cosa con Jquery, ma ne fai un'altra senza animazione? vale a dire aprire un pannello di accesso dell'amministratore slide-in nella parte superiore della pagina e saltare immediatamente in alto per vederlo.


6

Motivazione

Questa semplice soluzione funziona in modo nativo e implementa uno scorrimento uniforme in qualsiasi posizione.

Evita l'uso di collegamenti di ancoraggio (quelli con #) che, a mio avviso, sono utili se vuoi collegarti a una sezione, ma non sono così comodi in alcune situazioni, specialmente quando si punta verso l'alto che potrebbe portare a due URL diversi che puntano al stessa posizione ( http://www.example.org e http://www.example.org/# ).

Soluzione

Inserisci un ID nel tag che desideri scorrere, ad esempio la tua prima sezione , che risponde a questa domanda, ma l' id potrebbe essere posizionato ovunque nella pagina.

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

Quindi come pulsante è possibile utilizzare un collegamento, basta modificare l' attributo onclick con un codice come questo.

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

Dove l'argomento di document.getElementByIdè l' id del tag che si desidera scorrere dopo il clic.


Grazie! è un'ottima soluzione
Hugo Stiven Laguna Rueda,

@HugoStivenLagunaRueda, benvenuto, l'ho trovato su MDN, quindi grazie a Mozilla. È fantastico quante cose ci siano già, supportate in modo nativo. Adoro la vaniglia JS.
Gianluca Casati,


4

Puoi provare a usare JS come in questo violino http://jsfiddle.net/5bNmH/1/

Aggiungi il pulsante "Vai all'inizio" nel piè di pagina:

<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

Nessuna delle risposte sopra funzionerà in SharePoint 2016.

Deve essere fatto in questo modo: /sharepoint/195870/

var w = document.getElementById("s4-workspace");
w.scrollTop = 0;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.