मुझे स्क्रॉल करने योग्य क्षेत्र के भीतर एक div की दृश्यमान ऊंचाई को पुनः प्राप्त करने की आवश्यकता है। मैं अपने आप को jQuery के साथ बहुत सभ्य मानता हूं, लेकिन यह मुझे पूरी तरह से फेंक रहा है।
मान लीजिए कि मैंने एक काले आवरण के भीतर एक लाल रंग की डिव लगाई है:
ऊपर ग्राफिक में, jQuery फ़ंक्शन 248 div के दृश्य भाग को लौटाएगा।
एक बार जब उपयोगकर्ता उपर्युक्त ग्राफिक के रूप में div के शीर्ष पर स्क्रॉल करता है, तो यह 296 रिपोर्ट करेगा।
अब, उपयोगकर्ता द्वारा पिछले बार स्क्रॉल किए जाने के बाद, यह फिर से 248 रिपोर्ट करेगा।
जाहिर है कि मेरी संख्या उतनी सुसंगत और स्पष्ट नहीं होने वाली है, जितनी वे इस डेमो में हैं, या मैं उन नंबरों के लिए सिर्फ हार्ड कोड हूं।
मेरे पास एक सिद्धांत है:
- खिड़की की ऊंचाई प्राप्त करें
- डिव की ऊंचाई प्राप्त करें
- विंडो के शीर्ष से div की प्रारंभिक ऑफसेट करें
- उपयोगकर्ता स्क्रॉल के रूप में ऑफसेट प्राप्त करें।
- यदि ऑफसेट सकारात्मक है, तो इसका मतलब है कि डिव का शीर्ष अभी भी दिखाई दे रहा है।
- यदि यह नकारात्मक है, तो div के शीर्ष को खिड़की से ग्रहण किया गया है। इस बिंदु पर, डिव या तो खिड़की की पूरी ऊंचाई तक ले जा सकता है, या डिव के नीचे दिखाई दे सकता है
- यदि div का निचला भाग दिखाई दे रहा है, तो उसके और खिड़की के नीचे के बीच के अंतर का पता लगाएं।
यह बहुत आसान लगता है, लेकिन मैं अभी इसके चारों ओर अपना सिर नहीं लपेट सकता। कल सुबह एक और दरार लूंगा; मुझे लगा कि आपमें से कुछ जीनियस मदद करने में सक्षम हो सकते हैं।
धन्यवाद!
अद्यतन: मैंने अपने दम पर यह पता लगाया, लेकिन लगता है कि नीचे दिए गए उत्तरों में से एक अधिक सुरुचिपूर्ण है, इसलिए मैं इसके बजाय इसका उपयोग करूंगा। जिज्ञासु के लिए, मैं यहाँ आया हूँ:
$(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);
}
}
});