Alguém pode me mostrar como obter a top
& left
posição de um elemento div
ou span
quando um não está especificado?
ie:
<span id='11a' style='top:55px;' onmouseover="GetPos(this);">stuff</span>
<span id='12a' onmouseover="GetPos(this);">stuff</span>
Acima, se eu fizer:
document.getElementById('11a').style.top
O valor de 55px
é retornado. No entanto, se eu tentar fazer isso para span
'12a', nada será retornado.
Eu tenho um monte de div
/ span
s em uma página para a qual não posso especificar as propriedades top
/ left
, mas preciso exibir um div
diretamente sob esse elemento.
fonte
Você pode chamar o método
getBoundingClientRect()
em uma referência ao elemento. Em seguida, você pode examinar ostop
,left
,right
e / oubottom
propriedades ...Se estiver usando jQuery, você pode usar o código mais sucinto ...
fonte
getBoundingClientRect()
Deve ser usado +1 para esta resposta - e esta deve ser a resposta aceita! Mas você não precisa de um "navegador moderno" para que isso funcione, veja a lista de compatibilidade que mostrei aqui: stackoverflow.com/questions/1480133/… . Funciona bem no IE 4.0+ (!), Chrome 1.0+, FF 3.0+, Safari 4.0+ e Opera.getBoundingClientRect()
retorna valores relativos à janela de visualização, não ao documento. Para isso, você quer algo parecidotop = el.getBoundingClientRect().top + window.pageYOffset - el.ownerDocument.documentElement.clientTop
.getBoundingClientRect
levatransform
em consideração.Enquanto a resposta de @nickf funcionar. Se você não liga para navegadores mais antigos, pode usar esta versão Javascript puro. Funciona no IE9 + e outros
fonte
Como Alex observou, você pode usar jQuery offset () para obter a posição relativa ao fluxo do documento. Use position () para suas coordenadas x, y relativas ao pai.
EDIT: Alternado
document.ready
parawindow.load
porqueload
espera por todos os elementos para que você obtenha seus tamanhos em vez de simplesmente preparar o DOM. Na minha experiência,load
resulta em menos elementos posicionados em Javascript incorretamente.fonte
Para qualquer um que precise apenas da posição superior ou esquerda, pequenas modificações no código legível de @Nickf resolvem o problema.
e
fonte
Sei que este é um tópico antigo, mas a resposta de @alex precisa ser marcada como a resposta correta
element.getBoundingClientRect()
é uma correspondência exata para jQuery$(element).offset()
E é compatível com IE4 + ... https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect
fonte