Dapatkah seseorang menunjukkan kepada saya cara mendapatkan posisi top
& left
dari elemen div
atau span
jika tidak ditentukan?
yaitu:
<span id='11a' style='top:55px;' onmouseover="GetPos(this);">stuff</span>
<span id='12a' onmouseover="GetPos(this);">stuff</span>
Di atas, jika saya melakukannya:
document.getElementById('11a').style.top
Nilai 55px
dikembalikan. Namun, jika saya mencobanya untuk span
'12a', maka tidak ada yang dikembalikan.
Saya memiliki banyak div
/ span
s pada halaman yang tidak dapat saya tentukantop
/ left
properties-nya, tetapi saya perlu menampilkan div
langsung di bawah elemen itu.
sumber
Anda dapat memanggil metode
getBoundingClientRect()
dengan referensi ke elemen. Kemudian Anda dapat memeriksatop
,left
,right
dan / ataubottom
properti ...Jika menggunakan jQuery, Anda dapat menggunakan kode yang lebih ringkas ...
sumber
getBoundingClientRect()
harus digunakan - dan ini harus menjadi jawaban yang diterima! Tetapi Anda tidak memerlukan "browser modern" agar ini berfungsi, lihat daftar kompatibilitas yang saya tunjukkan di sini: stackoverflow.com/questions/1480133/… . Ini berfungsi dengan baik di IE 4.0+ (!), Chrome 1.0+, FF 3.0+, Safari 4.0+ dan Opera.getBoundingClientRect()
mengembalikan nilai relatif terhadap viewport, bukan dokumen. Untuk itu, Anda menginginkan sesuatu sepertitop = el.getBoundingClientRect().top + window.pageYOffset - el.ownerDocument.documentElement.clientTop
.getBoundingClientRect
mengambiltransform
ke rekening.Sementara jawaban @ nickf berhasil. Jika Anda tidak peduli dengan browser lama, Anda dapat menggunakan versi Javascript murni ini. Bekerja di IE9 +, dan lainnya
sumber
Seperti yang dicatat Alex, Anda dapat menggunakan jQuery offset () untuk mendapatkan posisi relatif terhadap aliran dokumen. Gunakan posisi () untuk koordinat x, y relatif terhadap induk.
EDIT: Switched
document.ready
untukwindow.load
karenaload
menunggu semua elemen sehingga Anda mendapatkan ukuran bukan hanya mempersiapkan DOM. Dalam pengalaman saya,load
menghasilkan lebih sedikit elemen posisi Javascript yang salah.sumber
Bagi siapa pun yang hanya membutuhkan posisi atas atau kiri, sedikit modifikasi pada kode @ Nickf yang dapat dibaca dapat membantu.
dan
sumber
Saya menyadari ini adalah utas lama, tetapi jawaban @alex perlu ditandai sebagai jawaban yang benar
element.getBoundingClientRect()
sama persis dengan jQuery$(element).offset()
Dan itu kompatibel dengan IE4 + ... https://developer.mozilla.org/en-US/docs/Web/API/Element.getBoundingClientRect
sumber