2013-04-26 5 views
19

Sto riscontrando un problema che in realtà è una "funzione" su Chrome. Come molti di voi potrebbero sapere, Chrome ricorda una posizione di scorrimento a cui ritorna, ogni volta che torni a una pagina. E ho un problema con quello.Chrome ricorda la posizione di scorrimento

C'è un modo per ignorare questo senza che l'utente se ne accorga?

Mees

Failed try-out:

  • scrollTop su document.ready
+0

quello che era l'implementazione di '.scrollTop (0)'? perché lo uso sempre con eventi 'popstate' e funziona perfettamente. – PlantTheIdea

+0

Sto usando '$ ('body, html'). ScrollTop (0);' per scorrere. Dopo un pronto. –

+2

basta fare '$ ('body'). ScrollTop (0)' (no 'html'), e se ancora non funziona, eseguilo su' $ (window) .load() 'invece di' $ (document) .ready() '. – PlantTheIdea

risposta

9

Ho controllato su chrome, ha funzionato bene. A volte si fa ingannare setTimeout :)

<script type="text/javascript"> 
window.onload=function(){ 
    setTimeout(function(){ 
     scrollTo(0,-1); 
    },0); 
} 
</script> 
+2

Funziona, ma non appena si inizia a scorrere di nuovo, la pagina salta alla posizione memorizzata – David

+0

Penso che ti sia mancata l'impostazione del valore "millisecondi"? Poiché il tuo snippet è impostato su 0, verrà eseguito immediatamente. Imposta il valore di timeout "millisecondi" su 1000 e questa soluzione funziona per me in Chrome. –

+2

in realtà, l'impostazione di un timeout su 0 non rende la funzione eseguita immediatamente, ma aggiunge la funzione alla fine della coda di esecuzione corrente (il codice che scorre alla posizione memorizzata si troverà in questa coda) –

0
x = 0; //horizontal coord 
y = document.height; //vertical coord 
window.scroll(x,y); 

Alcuni JavaScript del genere può benissimo essere in grado di essere manipolato per fermare lo scorrimento automatico.

Dipende però, sei contento che lo scorrimento sia semplicemente impostato per andare automaticamente in alto oppure stai effettivamente cercando l'opzione standard di Chrome per portare la pagina all'ultima posizione di scorrimento, per essere disattivata completamente?

Che cosa stai tentando di utilizzare per scrollTop()?

+1

Ho paura che anche il codice non abbia funzionato. Chrome sembra ignorarlo e torna alla posizione di scorrimento precedente. Sto usando scrollTop (valore) per scorrere fino a una certa quantità di pixel dalla parte superiore della finestra. –

+1

@MeesBoeijen - Forse perché Chrome esegue il backup dopo che gli script hanno completato l'esecuzione. Prova 'setTimeout (func, 1)'. –

-2

Ecco un modo pulito di ottenere questo fatto.

window.addEventListener('unload', function(e){ 
    document.body.style.display = 'none'; 
}); 

sufficiente impostare la visualizzazione corpo a 'none' non devi preoccuparti di un lampo del browser scorrendo fino alla parte superiore della pagina prima che venga scaricata e la posizione di scorrimento verrà automaticamente riportato a 0.

+0

Non sembra funzionare in Chrome quando si torna" indietro "a una pagina o si" rinfresca "una pagina. –

0

Ho risolto questo problema collegandolo all'evento di scorrimento e quindi ripristinando la posizione di scorrimento la prima volta che un utente scorre. Funziona per ricariche in loco per me.

appare come questa

var scrollResetOnce = false; 
$(window).on("scroll", function() { 
    if (scrollResetOnce) return; 
    scrollResetOnce = true; 
    scrollTo(0, -1); 
}); 
35

In Chrome 46+, il comportamento di scorrimento automatico può essere spento usando history.scrollRestoration:

if ('scrollRestoration' in history) { 
    history.scrollRestoration = 'manual'; 
} 

fonte: https://developers.google.com/web/updates/2015/09/history-api-scroll-restoration

+0

Questo ha aiutato immensamente! Grande bandiera da sapere. Grazie! –

+2

Questa risposta richiede più apprezzamento! GJ Cory e grazie. –

+0

Funziona anche in Firefox a partire dal 2017. Sicuramente la risposta migliore. – kursus