2011-10-19 22 views
7

voglio verificare se la pagina viene fatto scorrere dopo che è terminato il caricamento e sto usando questo codice:scrollTop() restituisce 0 in cromo

$(document).ready(function(){ 
    alert($(window).scrollTop()); 
}); 

Funziona bene in Firefox ma restituisce allways 0 in Chrome. Perchè è questo?

+0

Qual è la situazione? Stai verificando se il visitatore è arrivato alla tua pagina con un tag #hash? O stai controllando se il visitatore scorre prima che il documento finisca il caricamento? o entrambi? –

+1

eseguo un'animazione su elementi che sono appena passati in vista. ma se scorri la pagina e premi Aggiorna. la pagina ricaricata viene automaticamente spostata al punto di scorrimento precedente (pre-aggiornamento), quindi desidero conoscere la posizione di scorrimento della finestra per determinare quali elementi della pagina sono stati visualizzati e avviare l'animazione –

risposta

2

$(window).scrollTop() restituirà 0 quando la finestra non è scorrevole.

0

Provare il seguente codice in una pagina con testo e un collegamento nella parte inferiore della pagina. Ricorda di avere abbastanza testo o righe vuote al fine di rendere un rotolo della pagina fino a quando è possibile vedere il pulsante di mia

$(document).ready(function() { 
     alert($(window).scrollTop()); // first load if you did not scroll = 0 
     $("#button").click(function() { alert($(window).scrollTop()); }); 
     // hitting the button that is located on bottom of page 
     // - i had to scroll the page = xxx (68 in may case) 
    }); 

E 'normale che nel tuo caso per ottenere 0 perché la pagina non viene fatto scorrere, lo scostamento tra la tua posizione e la parte superiore della pagina è 0.

Ho provato in Chrome, FF6, IE9. Spero di essere stato utile.

+1

facendo clic sul tasto # per ottenere .scrollTop () non è il problema .. se scorri la pagina e premi Aggiorna. la pagina si estenderà dal punto in cui si scorre (pre-aggiornamento) .. e questa è la posizione che voglio sapere. e se lo fai in FF, emetterà il valore coretto. in Chrome 14.0 restituisce 0. –

4

In realtà Firefox è l'unico browser che non restituisce 0 per $ (finestra) .scrollTop() su domReady o window.onload. Chrome, Safari e IE tutto il ritorno 0. L'unico modo sicuro per ottenere la corretta posizione della barra di scorrimento sul domready è, come detto in un'altra risposta sopra, per impostare un gestore di eventi sul evento scroll della finestra come di seguito:

$(document).ready(function(){ 
    $(window).scroll(function() { 
     console.log($(window).scrollTop()); 
     $(window).unbind('scroll'); 
    }); 
}); 
+0

Davvero non capisco perché la gente abbia votato la tua risposta. Questo funziona davvero. Inoltre, ho notato che Chrome genererà l'evento di scorrimento due volte. Prima sul caricamento normale della pagina e una seconda volta se si scorre alla posizione precedente dell'utente (ad esempio dopo aver premuto F5 per ricaricare la pagina). – Fleshgrinder

2

Il chrome ripristina la posizione di scorrimento pre-aggiornamento una volta caricato il DOM. Quindi, ottenere scrollTop su evento di scorrimento invece di evento pronto funzionerà.

2

Ho anche avuto il problema che scrollTop() sempre restituito 0 in Chrome, se ho usato su window, su document o 'html,body'. Alla fine ho scoperto che i CSS era il problema:

html, body { 
    height: 100%; 
    overflow-x: hidden; 
} 

In realtà, non so esattamente perché, perché è possibile rimuovere le parti di questo codice e quindi funziona di nuovo. Strano ma problema risolto;)

+0

grazie mille! è davvero strano! Lavorato su Safari ma non su Chrome, dopo averlo aggiunto al mio css, entrambi funzionano su entrambi i browser! – bbnn

0

Ho avuto lo stesso problema, ma è stato riparato aggiungendo la dichiarazione di documento:

<!DOCTYPE html>