2012-03-04 11 views
11

Ho notato che se si è su una pagina e si scorre un po 'verso il basso, se si aggiorna la pagina, la maggior parte dei browser tornerà indietro alla posizione. C'è un modo per prevenire questo?Prevenire l'aggiornamento "Jump" con Javascript

Ho esaminato due opzioni e nessuna è coerente con Webkit/Firefox.

window.scrollTo(0, 1); 
    $('html, body').animate({ scrollTop: 0 }, 0); 

Qualche idea?

È possibile controllare un risultato di ricerca di google per un esempio.

+0

Questo è l'opposto di ciò che la gente di solito vuole. Tuttavia, se si aggiunge semplicemente un hash '#' alla fine dell'URL, salterà all'inizio in fase di aggiornamento, per impostazione predefinita. – Sparky

+4

@minitech L'ho letto come OP che vuole impedire al browser di tornare alla precedente posizione di scorrimento come suggerisce Sparky672, e invece di tornare all'inizio. –

+0

@minitech: In realtà la domanda è come impedire lo scorrimento. –

risposta

6

Non vedo alcun motivo per cui questo non dovrebbe funzionare in tutti i browser, sembra funzionare per me (con una sola funzione per window.onload, usare di più e potrebbero esserci problemi)?

window.onload = function() { 
    scrollTo(0,0); 
} 

per farlo funzionare quando il pulsante indietro viene cliccato aswell, forse qualcosa di simile:

<body onunload=""> 
<script type="text/javascript"> 
    window.onload = function() { 
     scrollTo(0,0); 
    } 
</script> 
//content here 
</body> 
+0

Cosa vuol dire 'onunload =" "' vuoto? – Sparky

+0

Il onunload è per il bfcache –

1

Qualcosa come di seguito funziona per me, creare qualche elemento che può essere messo a fuoco e concentrarsi a pagina scorrere .

In questo caso, si ritorna in cima dopo aver aggiornato la pagina.

Testato su IE/FF/Chrome.

<html> 
    <head> 
     <script type="text/javascript"> 
      window.onload = function() { 
       setTimeout (function() { 
        // use both 'a' and 'button' because 'a' not work as expected on some browsers 
        document.getElementById('top_anchor').focus(); 
        document.getElementById('top_anchor_btn').focus(); 
       }, 0); 
      } 
     </script> 
    </head> 
    <body> 
     <a id="top_anchor" href="" style="width: 1px; height: 1px; position: absolute; top: 0px; left: -1000px;"></a> 
     <button id="top_anchor_btn" href="" style="width: 1px; height: 1px; position: absolute; top: 0px; left: -1000px;"></button> 

     <div> top </div> 
     <div style="width: 500px; height: 2000px; background-color: #83FEBC;"> 
      content 
     </div> 
    </body> 
</html> 

saluti,

Ben

+0

Uh, perché setTimeout()? – AlanFoster

+1

Assicurati di farlo più tardi, Chrome ne ha bisogno. – benbai123

13

funziona per me:

// Scroll top bro 
window.onload = function() { 
setTimeout (function() { 
    scrollTo(0,0); 
}, 0); 
} 
+0

Funziona per uno dei miei progetti! Grazie mille amico! – Simon

+3

Questa è una risposta migliore. Il setTimeout aiuta a catturare condizioni di corsa difficili con alcuni browser che attivano il salto di scorrimento dopo l'evento window.onload. – tohster

+0

d'accordo, questa risposta è stata quella che ha effettivamente funzionato per me. Safari 6.1.1 su Mac inizialmente esegue il mio codice scrollTo, quindi salta alla posizione precedente dopo il caricamento della pagina. facendo questo ha vinto la gara. – jammypeach

11

su Chrome, anche se si forza scrollTop a 0 salterà in seguito, dopo il primo evento di scorrimento.

Si dovrebbe legare il rotolo a questo:

$(window).on('beforeunload', function() { 
    $(window).scrollTop(0); 
}); 

modo che il browser è ingannato a credere che fosse sul all'inizio prima l'aggiornamento.

0

solo per aggiornare quello @josetapadas detto, per le versioni più recenti sarebbe meglio utilizzare la funzione, invece di beforeunloadunload questo sarà

$(window).on('unload', function() { 
$(window).scrollTop(0); 
}); 
Problemi correlati