OK dal momento che nessuno ha risposto esattamente su ciò che è tutta una questione:
.position().top
non prende in considerazione il margine di un elemento.jsFiddle demo
Il tuo primo esempio potrebbe funzionare in Chrome, ma non in Firefox, causa delle lievi differenze nelle documentElement
.
Per tenere conto di essa si dovrà utilizzare:
$('html, body').animate({
Ora, diamo un'occhiata alla differenza tra i metodi .position()
e .offset()
:
.position()
ottenere la corrente coordinate del primo elemento nel set di elementi abbinati, relativi al genitore di offset.
.offset()
ottenere le coordinate correnti del primo elemento, o impostare le coordinate di ogni elemento, nella serie di elementi accoppiati, relativi al documento.
se quanto precede è chiaro, e si desidera ottenere la posizione elemento interno child
all'interno di un genitore posizionato *, è necessario utilizzare .position()
.
#parent {
height: 300px;
background: teal;
margin: 500px 0 0 0;
overflow:scroll;
position:relative; /* NEEDED! */
}
Ora, si potrebbe avere impostato il margine elemento del interiore per 500px
ma è top posizione è ancora 0
px!
console.log($('#child').position().top); // 0
Pertanto è necessario impostare uno stile top:
(invece di margin
) e position:
all'elemento #save
al fine di utilizzare $('#child').position().top
: http://jsfiddle.net/RokoCB/qVWuv/203/(o almeno mettere alcuni altri elementi prima di esso o alcuni contenuti).
* Se non si imposta una "posizione:" proprietà CSS per l'elemento principale è necessario sottrarre prima posizione del genitore o di offset.
La barra di scorrimento dell'elemento '.myClass'? Contiene l'elemento '# myId'? – panther
sì myClass ha una barra di scorrimento e sto usando mtId all'interno di myClass – akash
http://jsfiddle.net/qVWuv/199/ Funziona bene qui –