Kaydırılabilir bir alan içindeki bir div'in görünür yüksekliğini almam gerekiyor. JQuery konusunda kendimi oldukça iyi görüyorum, ancak bu beni tamamen atıyor.
Diyelim ki siyah bir sarmalayıcı içinde kırmızı bir div var:
Yukarıdaki grafikte jQuery işlevi, div'in görünür kısmı olan 248'i döndürecektir.
Yukarıdaki grafikte olduğu gibi, kullanıcı div'in üst kısmını kaydırdığında 296'yı bildirir.
Şimdi, kullanıcı div'i geçtikten sonra tekrar 248'i rapor edecektir.
Açıkçası, rakamlarım bu demodaki kadar tutarlı ve net olmayacak, yoksa bu numaralar için kodlama yapardım.
Biraz teorim var:
- Pencerenin yüksekliğini alın
- Div yüksekliğini alın
- Pencerenin üstünden div'in ilk ofsetini alın
- Kullanıcı kaydırdıkça ofseti alın.
- Göreli konum pozitifse, div'in tepesinin hala görünür olduğu anlamına gelir.
- negatifse, div'in üst kısmı pencere tarafından gölgelenmiştir. Bu noktada, div pencerenin tüm yüksekliğini kaplıyor olabilir veya div'in alt kısmı gösteriliyor olabilir
- Div'in altı gösteriliyorsa, bununla pencerenin altı arasındaki boşluğu bulun.
Oldukça basit görünüyor, ama kafamı dolanamıyorum. Yarın sabah başka bir çatlak alacağım; Bazı dahilerin yardımcı olabileceğini düşündüm.
Teşekkürler!
GÜNCELLEME: Bunu kendi başıma çözdüm, ancak aşağıdaki cevaplardan biri daha zarif görünüyor, bu yüzden onun yerine onu kullanacağım. Merak edenler için, işte bulduğum şey:
$(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);
}
}
});