Saya ingin mendapatkan posisi elemen relatif ke viewport browser (viewport di mana halaman ditampilkan, bukan seluruh halaman). Bagaimana ini bisa dilakukan dalam JavaScript?
Terimakasih banyak
javascript
Waleed Eissa
sumber
sumber
Jawaban:
Jawaban yang ada sekarang sudah usang.
getBoundingClientRect()
Metode asli telah ada selama beberapa waktu sekarang, dan melakukan persis apa yang ditanyakan. Plus itu didukung di semua browser (termasuk IE 5, tampaknya!)Dari halaman MDN :
Nilai yang dikembalikan adalah objek TextRectangle, yang berisi properti read-only left, top, right, dan bottom yang menggambarkan kotak batas, dalam piksel, dengan relatif kiri atas ke kiri atas viewport .
Anda menggunakannya seperti ini:
sumber
getBoundingClientRect().top
tidak di IE11 saya mengembalikan 0. Apakah Anda punya solusi.Pada kasus saya, agar aman mengenai pengguliran, saya menambahkan window.scroll ke persamaan:
Itu memungkinkan saya untuk mendapatkan posisi relatif elemen pada dokumen, bahkan jika sudah digulir.
sumber
getBoundingClientRect().top
tidak di IE11 saya mengembalikan 0. Apakah Anda punya solusi.window.scrollY || window.pageYOffset
dapat meningkatkan dukunganSunting: Tambahkan beberapa kode ke akun untuk pengguliran halaman.
Argumen id adalah id elemen yang offsetnya Anda inginkan. Diadaptasi dari pos quirksmode .
sumber
sumber
Anda dapat mencoba:
node.offsetTop - window.scrollY
Ini bekerja di Opera dengan tag meta viewport ditentukan.
sumber
offsetTop
itu relatif terhadap elemen posisi terdekat. Yang, tergantung pada struktur halaman, mungkin atau mungkin bukan elemen root.jQuery mengimplementasikan ini dengan sangat elegan. Jika Anda melihat sumber untuk jQuery
offset
, Anda akan menemukan ini pada dasarnya bagaimana ini diterapkan:sumber
Fungsi pada halaman ini akan mengembalikan persegi panjang dengan koordinat atas, kiri, tinggi dan lebar dari elemen yang disahkan relatif ke port tampilan browser.
sumber
sumber
sumber
Terima kasih atas semua jawabannya. Tampaknya Prototipe sudah memiliki fungsi yang melakukan fungsi ini (halaman ()). Dengan melihat kode sumber fungsi, saya menemukan bahwa pertama-tama menghitung posisi elemen offset relatif terhadap halaman (yaitu bagian atas dokumen), kemudian kurangi scrollTop dari itu. Lihat kode sumber prototipe untuk lebih jelasnya.
sumber
Saya mengasumsikan elemen yang memiliki id
btn1
ada di halaman web, dan juga bahwa jQuery disertakan. Ini telah berfungsi di semua browser modern Chrome, FireFox, IE> = 9 dan Edge. jQuery hanya digunakan untuk menentukan posisi relatif terhadap dokumen.sumber
Terkadang
getBoundingClientRect()
nilai properti objek menunjukkan 0 untuk IE. Dalam hal ini Anda harus mengaturdisplay = 'block'
elemen. Anda dapat menggunakan kode di bawah ini untuk semua browser untuk mendapatkan offset.Perpanjang fungsi jQuery:
Gunakan:
sumber