इस सवाल के 30 से अधिक उत्तर हैं, और उनमें से कोई भी आश्चर्यजनक सरल, शुद्ध जेएस समाधान का उपयोग नहीं करता है जो मैं उपयोग कर रहा हूं। इसे हल करने के लिए सिर्फ jQuery लोड करने की आवश्यकता नहीं है, क्योंकि कई अन्य लोग जोर दे रहे हैं।
यह देखने के लिए कि क्या तत्व व्यूपोर्ट के भीतर है, हमें पहले शरीर के भीतर तत्वों की स्थिति निर्धारित करनी चाहिए। जैसा कि मैंने एक बार सोचा था, हमें यह पुनरावृत्ति करने की आवश्यकता नहीं है। इसके बजाय, हम उपयोग कर सकते हैं element.getBoundingClientRect()
।
pos = elem.getBoundingClientRect().top - document.body.getBoundingClientRect().top;
यह मान ऑब्जेक्ट के शीर्ष और शरीर के शीर्ष के बीच Y अंतर है।
हमें तब बताना चाहिए कि क्या तत्व दृश्य के भीतर है। अधिकांश कार्यान्वयन पूछते हैं कि क्या पूर्ण तत्व व्यूपोर्ट के भीतर है, इसलिए यह वह है जिसे हम कवर करेंगे।
सबसे पहले, विंडो के शीर्ष स्थिति है: window.scrollY
।
हम विंडो की ऊँचाई को विंडो की ऊँचाई से जोड़कर उसकी शीर्ष स्थिति प्राप्त कर सकते हैं:
var window_bottom_position = window.scrollY + window.innerHeight;
तत्व की शीर्ष स्थिति प्राप्त करने के लिए एक सरल कार्य करें:
function getElementWindowTop(elem){
return elem && typeof elem.getBoundingClientRect === 'function' ? elem.getBoundingClientRect().top - document.body.getBoundingClientRect().top : 0;
}
यह फ़ंक्शन विंडो के भीतर तत्व की शीर्ष स्थिति लौटाएगा या 0
यदि आप इसे .getBoundingClientRect()
विधि के साथ एक तत्व के अलावा कुछ और पास करते हैं तो यह वापस आ जाएगी । यह विधि लंबे समय से आसपास है, इसलिए आपको अपने ब्राउज़र को इसका समर्थन नहीं करने के बारे में चिंता नहीं करनी चाहिए।
अब, हमारे तत्व की शीर्ष स्थिति है:
var element_top_position = getElementWindowTop(element);
और या तत्व का निचला स्थान है:
var element_bottom_position = element_top_position + element.clientHeight;
अब हम निर्धारित कर सकते हैं कि तत्व व्यूपोर्ट के भीतर है या नहीं, अगर तत्व की निचली स्थिति व्यूपोर्ट की शीर्ष स्थिति से कम है और यह जांचने से कि तत्व की टॉप पोजिशन व्यूपोर्ट के निचले स्थान से अधिक है या नहीं:
if(element_bottom_position >= window.scrollY
&& element_top_position <= window_bottom_position){
//element is in view
else
//element is not in view
वहां से, आप in-view
अपने तत्व पर एक वर्ग जोड़ने या हटाने के लिए तर्क कर सकते हैं , जिसे आप बाद में अपने CSS में संक्रमण प्रभाव के साथ संभाल सकते हैं।
मैं बिल्कुल चकित हूं कि मुझे यह समाधान कहीं और नहीं मिला, लेकिन मुझे विश्वास है कि यह सबसे साफ और सबसे प्रभावी समाधान है, और इसके लिए आपको jQuery लोड करने की आवश्यकता नहीं है!