Beberapa dokumen saya tidak bisa mendapatkan ketinggian dokumen (untuk memposisikan sesuatu benar-benar di bagian paling bawah). Selain itu, padding-bottom pada tampaknya tidak melakukan apa-apa pada halaman ini, tetapi lakukan pada halaman di mana ketinggian akan kembali. Poin dalam poin:
http://fandango.com
http://paperbackswap.com
Pada Fandango
jQuery $(document).height();
mengembalikan nilai yang benar
document.height
mengembalikan 0
document.body.scrollHeight
mengembalikan 0
Pada Paperback Swap: TypeError
jQuery $(document).height();
: $(document)
adalah null
document.height
mengembalikan nilai yang salah
document.body.scrollHeight
mengembalikan nilai yang salah
Catatan: Saya memiliki izin level browser, jika ada trik di sana.
javascript
Nic
sumber
sumber
Jawaban:
Ukuran dokumen adalah mimpi buruk kompatibilitas browser karena, meskipun semua browser mengekspos properti clientHeight dan scrollHeight, mereka tidak semua setuju bagaimana nilai-nilai dihitung.
Dulu ada rumus praktik terbaik yang kompleks di sekitar untuk bagaimana Anda menguji tinggi / lebar yang benar. Ini melibatkan penggunaan properti document.documentElement jika tersedia atau mundur pada properti dokumen dan sebagainya.
Cara paling sederhana untuk mendapatkan ketinggian yang benar adalah dengan mendapatkan semua nilai ketinggian ditemukan di dokumen, atau documentElement, dan gunakan yang tertinggi. Ini pada dasarnya adalah apa yang dilakukan jQuery:
Pengujian cepat dengan Firebug + jQuery bookmarklet mengembalikan tinggi yang benar untuk kedua halaman yang dikutip, dan begitu juga contoh kode.
Perhatikan bahwa pengujian ketinggian dokumen sebelum dokumen siap akan selalu menghasilkan 0. Juga, jika Anda memuat lebih banyak barang, atau pengguna mengubah ukuran jendela, Anda mungkin perlu menguji ulang. Gunakan
onload
atau acara siap dokumen jika Anda memerlukan ini pada waktu buka, jika tidak, hanya menguji setiap kali Anda membutuhkan nomor tersebut.sumber
Ini adalah pertanyaan yang sangat lama, dan karenanya, memiliki banyak jawaban yang sudah ketinggalan zaman. Pada tahun 2020 semua browser utama telah mematuhi standar .
Jawaban untuk 2020:
Sunting: di atas tidak mengambil margin pada
<body>
tag ke akun. Jika tubuh Anda memiliki margin, gunakan:sumber
document.documentElement.getBoundingClientRect()
bekerja lebih baik.<h1>
elemen di awal<body>
margin default, itu akan mendorong<body>
elemen ke bawah tanpa cara untuk mendeteksinya.document.documentElement.scrollHeight
(bukandocument.body,scrollHeight
) adalah cara paling akurat dalam melakukan sesuatu. Ini bekerja dengan kedua margin tubuh dan margin barang-barang di dalam tubuh mendorongnya ke bawah.Anda bahkan dapat menggunakan ini:
atau lebih jQuery (karena seperti yang Anda katakan jQuery tidak bohong) :)
sumber
Perhitungan tinggi dokumen lengkap:
Untuk menjadi lebih umum dan menemukan ketinggian dokumen apa pun, Anda bisa menemukan Node DOM tertinggi pada halaman saat ini dengan rekursi sederhana:
Anda dapat mengujinya di situs sampel Anda ( http://fandango.com/ atau http://paperbackswap.com/ ) dengan menempelkan skrip ini ke Konsol DevTools.
CATATAN: ini bekerja dengan
Iframes
.Nikmati!
sumber
"Metode jQuery" untuk menentukan ukuran dokumen - permintaan segalanya, mengambil nilai tertinggi, dan berharap yang terbaik - bekerja dalam banyak kasus, tetapi tidak semuanya .
Jika Anda benar - benar membutuhkan hasil anti peluru untuk ukuran dokumen, saya sarankan Anda menggunakan plugin jQuery.documentSize saya . Tidak seperti metode lain, ini benar-benar menguji dan mengevaluasi perilaku browser ketika dimuat dan, berdasarkan hasilnya, menanyakan properti yang tepat dari sana di luar.
Dampak dari pengujian satu kali ini terhadap kinerja sangat minim , dan plugin mengembalikan hasil yang tepat bahkan dalam skenario paling aneh - bukan karena saya katakan demikian, tetapi karena rangkaian pengujian besar yang dibuat secara otomatis benar-benar memverifikasi hal itu.
Karena plugin ini ditulis dalam vanilla Javascript, Anda dapat menggunakannya tanpa jQuery juga.
sumber
Saya berbohong, jQuery mengembalikan nilai yang benar untuk kedua halaman $ (dokumen) .height (); ... mengapa saya pernah meragukannya?
sumber
Jawaban yang tepat untuk 2017 adalah:
document.documentElement.getBoundingClientRect().height
Berbeda
document.body.scrollHeight
dengan metode ini, akun ini menggunakan margin tubuh. Ini juga memberikan nilai ketinggian fraksional, yang dapat berguna dalam beberapa kasussumber
document.body.scrollHeight
mencantumkan seluruh ketinggian yang dapat digulir, yang merupakan pertanyaan awal yang diajukan.html { height: 100% }
di css. Jadi API dengan benar mengembalikan tinggi yang dihitung sebenarnya . Coba hapus gaya ini dan tambahkan juga marginbody
dan Anda akan melihat apa masalahnya dengan menggunakandocument.body.scrollHeight
.<h1>
elemen di awal<body>
margin default, itu akan mendorong<body>
elemen ke bawah tanpa cara untuk mendeteksinya.document.documentElement.scrollHeight
(bukandocument.body,scrollHeight
) adalah cara paling akurat dalam melakukan sesuatu.documentElement.scrollHeight
memberikan nilai yang salah dalam hal ini.documentElement.getBoundingClientRect().height
memberikan yang benar. lihat ini: jsfiddle.net/fLpqjsxdgetBoundingClientRect().height
. Itu akan teralihkan, sementara 3 (tiga) metode lain tidak teralihkan. Termasuk yang Anda sebut lebih rendah dari itu. Dan Anda bersikeras melakukannya dengan menyarankan untuk menghapus 100% dari tinggi html halaman ini, dan menambahkan margin untuk itu. Apa gunanya ? Terima saja itugetBoundingClientRect().height
juga bukan bukti-peluru.Untuk mendapatkan lebar dalam lintas browser / cara perangkat gunakan:
sumber
Bagi siapa pun yang kesulitan menggulir halaman berdasarkan permintaan, menggunakan deteksi fitur, saya telah membuat hack ini untuk mendeteksi fitur mana yang akan digunakan dalam gulir animasi.
Masalahnya adalah keduanya
document.body.scrollTop
dandocument.documentElement
selalu kembalitrue
di semua browser.Namun Anda hanya dapat benar-benar menggulir dokumen dengan salah satu atau yang lain.
d.body.scrollTop
untuk Safari dandocument.documentElement
untuk semua lainnya menurut w3schools (lihat contoh)element.scrollTop
berfungsi di semua browser, tidak demikian untuk level dokumen.sumber
gunakan kode tiup untuk menghitung ketinggian + gulir
sumber
Kode peramban silang di bawah ini mengevaluasi semua ketinggian yang mungkin dari elemen tubuh dan html dan mengembalikan maks yang ditemukan:
Contoh kerja:
sumber
Saya tidak tahu tentang menentukan ketinggian sekarang, tetapi Anda dapat menggunakan ini untuk meletakkan sesuatu di bagian bawah:
sumber
Tambahkan Referensi dengan benar
Dalam kasus saya, saya menggunakan halaman ASCX dan halaman aspx yang berisi kontrol ascx tidak menggunakan referensi dengan benar. Saya baru saja menempelkan kode berikut dan berhasil:
sumber