Saya perlu mengambil ketinggian div yang terlihat dalam area yang dapat digulir. Saya menganggap diri saya cukup baik dengan jQuery, tetapi ini benar-benar membuat saya marah.
Katakanlah saya punya div merah di dalam bungkus hitam:
Dalam grafik di atas, fungsi jQuery akan mengembalikan 248, bagian div yang terlihat.
Setelah pengguna menggulir melewati bagian atas div, seperti pada grafik di atas, ini akan melaporkan 296.
Sekarang, setelah pengguna menggulir melewati div, itu akan melaporkan lagi 248.
Jelas nomor saya tidak akan sekonsisten dan sejelas di demo ini, atau saya hanya kode keras untuk nomor-nomor itu.
Saya punya sedikit teori:
- Dapatkan ketinggian jendela
- Dapatkan ketinggian div
- Dapatkan offset awal div dari bagian atas jendela
- Dapatkan offset saat pengguna menggulir.
- Jika offsetnya positif, itu berarti bagian atas div masih terlihat.
- jika negatif, bagian atas div telah terhalang oleh jendela. Pada titik ini, div bisa saja memenuhi seluruh tinggi jendela, atau bagian bawah div bisa ditampilkan
- Jika bagian bawah div muncul, cari tahu jarak antara div dan bagian bawah jendela.
Tampaknya cukup sederhana, tetapi saya tidak bisa membungkus kepalaku di sekitarnya. Saya akan mengambil celah lagi besok pagi; Saya baru saja membayangkan beberapa dari Anda yang jenius mungkin bisa membantu.
Terima kasih!
PEMBARUAN: Saya menemukan ini sendiri, tetapi sepertinya salah satu jawaban di bawah ini lebih elegan, jadi saya akan menggunakan itu sebagai gantinya. Bagi yang penasaran, inilah yang saya temukan:
$(document).ready(function() {
var windowHeight = $(window).height();
var overviewHeight = $("#overview").height();
var overviewStaticTop = $("#overview").offset().top;
var overviewScrollTop = overviewStaticTop - $(window).scrollTop();
var overviewStaticBottom = overviewStaticTop + $("#overview").height();
var overviewScrollBottom = windowHeight - (overviewStaticBottom - $(window).scrollTop());
var visibleArea;
if ((overviewHeight + overviewScrollTop) < windowHeight) {
// alert("bottom is showing!");
visibleArea = windowHeight - overviewScrollBottom;
// alert(visibleArea);
} else {
if (overviewScrollTop < 0) {
// alert("is full height");
visibleArea = windowHeight;
// alert(visibleArea);
} else {
// alert("top is showing");
visibleArea = windowHeight - overviewScrollTop;
// alert(visibleArea);
}
}
});