Apa cara termudah untuk menentukan posisi elemen relatif terhadap jendela dokumen / badan / browser?
Saat ini saya menggunakan .offsetLeft/offsetTop
, tetapi metode ini hanya memberi Anda posisi relatif terhadap elemen induk, jadi Anda perlu menentukan berapa banyak orang tua ke elemen tubuh, untuk mengetahui posisi yang bergantung pada tubuh / jendela browser / posisi dokumen.
Metode ini juga rumit.
javascript
dom
einstein
sumber
sumber
Anda bisa mendapatkan posisi atas dan kiri tanpa melintasi DOM seperti ini:
sumber
<html>
elemen.Anda dapat menggunakan
element.getBoundingClientRect()
untuk mengambil posisi elemen yang berhubungan dengan viewport.Kemudian gunakan
document.documentElement.scrollTop
untuk menghitung offset viewport.Jumlah keduanya akan memberikan posisi elemen relatif terhadap dokumen:
sumber
document.documentElement.scrollTop
tidak bekerja di Safari, gunakanwindow.scrollY
sajaSaya sarankan menggunakan
seperti yang diusulkan di sini, bukan penghitungan offset manual melalui offsetLeft , offsetTop , dan offsetParent . seperti yang diusulkan di sini Dalam beberapa keadaan * traversal manual memberikan hasil yang tidak valid. Lihat Plunker ini: http://plnkr.co/pC8Kgj
* Ketika elemen berada di dalam induk yang dapat digulir dengan pemosisian statis (= default).
sumber
offsetLeft
danoffsetTop
tidak memperhitungkan transformasi CSS3getBoundingClientRect()
. Jadi itu kasus hasilnya mungkin tidak valid. Jika Anda membutuhkannya, Anda bisa mendapatkan elemen offset relatif terhadap induk (likeoffsetLeft
) menggunakan(element.getBoundingClientRect().left - parent.getBoundingClientRect().left)
.document-offset
( Skrip pihak ketiga ) menarik dan tampaknya memanfaatkan pendekatan dari jawaban lain di sini.Contoh:
sumber
Saya telah menemukan metode berikut untuk menjadi yang paling dapat diandalkan ketika berhadapan dengan kasus tepi yang tersandung offsetTop / offsetLeft.
sumber
Bagi mereka yang ingin mendapatkan koordinat x dan y dari berbagai posisi elemen, relatif terhadap dokumen.
Pemakaian
getCoords(document.querySelector('selector'), 'center')
getCoords(document.querySelector('selector'), 'bottom right')
getCoords(document.querySelector('selector'), 'top center')
sumber
Jika Anda tidak keberatan menggunakan jQuery, maka Anda dapat menggunakan
offset()
fungsi. Lihat dokumentasi jika Anda ingin membaca lebih lanjut tentang fungsi ini.sumber
http://www.quirksmode.org/js/findpos.html Menjelaskan cara terbaik untuk melakukannya, secara keseluruhan, Anda berada di jalur yang benar, Anda harus menemukan offset dan melintasi pohon induk.
sumber