अगर एक div नीचे तक स्क्रॉल किया जाता है तो मैं कैसे निर्धारित कर सकता हूं?


84

मैं jQuery या किसी अन्य जावास्क्रिप्ट पुस्तकालय का उपयोग किए बिना कैसे निर्धारित कर सकता हूं, अगर एक ऊर्ध्वाधर स्क्रॉलबार के साथ एक डिव को नीचे तक सभी तरह से स्क्रॉल किया जाता है?

मेरा सवाल नीचे तक स्क्रॉल करने का नहीं है। मुझे पता है कि कैसे करना है। मैं निर्धारित करना चाहता हूं कि क्या डिव को पहले से ही नीचे तक स्क्रॉल किया गया है।

यह काम नहीं करता:

if (objDiv.scrollTop == objDiv.scrollHeight) 

यहाँ केवल अनुमान लगाने पर अगर (objDiv.scrollTop> objDiv.scrollHeight) और स्क्रॉल स्क्रॉल तीर के आकार को कम करने की आवश्यकता हो सकती है (20px कहो)
Itay Moav -Mimimovka

जवाबों:


105

तुम बहुत पास हो scrollTop == scrollHeight

scrollTop स्क्रॉल स्थिति के शीर्ष को संदर्भित करता है, जो होगा scrollHeight - offsetHeight

यदि आपका कथन ऐसा दिखना चाहिए (ट्रिपल बराबर का उपयोग करना न भूलें):

if( obj.scrollTop === (obj.scrollHeight - obj.offsetHeight))
{
}

संपादित करें: मेरा उत्तर सही है, पूरी तरह से गलत था


4
यह लगभग काम करता है, स्क्रॉलहाइट-ऑफसेटहाइट, स्क्रॉलटॉप के समान ही मूल्य नहीं है, लेकिन आपके कोड की कोशिश करने के बाद, अगर मुझे आवश्यकता है कि अगर यह अंतर 5 पिक्सल से कम है, तो नीचे की तरफ मुझे वह व्यवहार मिलेगा जो मुझे चाहिए।
ब्योर्न

1
यह सटीक नहीं है। obj.borderWidth पर विचार करने की आवश्यकता है
लूपिंग

2
मैं इस जवाब को पसंद करता हूं: stackoverflow.com/questions/5828275/…
क्रिस

3
scrollTopगैर-अभिन्न हो सकता है, इसलिए इसे obj.scrollHeight - obj.offsetHeight - obj.scrollTop < 1सभी परिस्थितियों में काम करने के लिए कुछ सहिष्णुता (कहना ) चाहिए । देखें stackoverflow.com/questions/5828275/...
क्रिस मार्टिन

शायद यह मेरे लेआउट पर तय तत्वों के साथ कुछ करने के लिए है या कुछ और अजीब है जो मैं कर रहा हूं, लेकिन केवल यही समय सच का मूल्यांकन करता है जब मैं शीर्ष पर सभी तरह से स्क्रॉल करता हूं। ऐसा इसलिए है क्योंकि मेरे उदाहरण (क्रोम) में document.body.scrollHeightबराबर document.body.offsetHeightहै
इवान डे ला क्रूज़

24

सीमा, क्षैतिज स्क्रॉलबार, और / या फ़्लोटिंग पिक्सेल गणना जैसी चीज़ों को ध्यान में रखते हुए सही परिणाम प्राप्त करने के लिए, आपको उपयोग करना चाहिए ...

el.scrollHeight - el.scrollTop - el.clientHeight < 1

नोट: यदि आप सही परिणाम प्राप्त करना चाहते हैं तो आप ऑफसेट के बजाय क्लाइंटहाइट का उपयोग करें। ऑफसेट तभी आपको सही परिणाम देगा जब एल के पास सीमा या क्षैतिज स्क्रॉलबार नहीं होगा


साथ ही एकमात्र उत्तर जो मेरे लिए काम करता है। मैं स्क्रॉलबार को छिपाने के लिए पैडिंग का उपयोग कर रहा हूं।
क्रेग

clientHeight वास्तव में अच्छा काम किया। स्वीकार किए जाते हैं जवाब में offsetHeight का उपयोग कर मुझे एक नतीजा यह है कि 100% सही नहीं था दिया
फिनले Roelofs

सुरुचिपूर्ण, धन्यवाद। आप इसे स्क्रॉल इवेंट में Vue के साथ भी उपयोग कर सकते हैं @scroll="scrolling"फिर scrolling(event) { event.target // as el in the answer }शुभकामनाएँ
Yassine Sedrani

10

इस पार्टी में थोड़ी देर हो गई, लेकिन ऊपर दिए गए जवाबों में से कोई भी विशेष रूप से अच्छी तरह से काम करने लगता है जब ...

  • UHD डिस्प्ले के लिए OS पर डिस्प्ले स्केलिंग लागू की गई है
  • स्केलिंग / ज़ूम ब्राउज़र पर लागू होता है

सभी घटनाओं के लिए समायोजित करने के लिए, आपको गणना स्क्रॉल स्थिति को गोल करना होगा:

Math.ceil(element.scrollHeight - element.scrollTop) === element.clientHeight

यह उत्तर पहले वाला है जो ठीक से काम करता है (मैंने stackoverflow.com/q/5828275 साथ ही उत्तरों का परीक्षण किया है )। जैसा कि दूसरों ने उल्लेख किया है, मार्जिन, ज़ूम और अन्य कारक खेल में आते हैं - और यह उन सभी को संभालने के लिए लगता है। संपादित करें: नीचे स्पेन्सर का उत्तर मूल रूप से एक जैसा लगता है, यह भी सही है।
जनवरी ब्रैडेक

8

यदि कोई तत्व अपने स्क्रॉल के अंत में है, तो यह सही है कि यह नहीं है।

element.scrollHeight - element.scrollTop === element.clientHeight

मोज़िला डेवलपर नेटवर्क


1
मेरे लिए, Chrome का उपयोग करना, जहां तत्व document.body है, यह काम नहीं करता है। document.body.scrollHeightऔर document.bodyclientHeightएक ही मूल्य है और इसलिए अभिव्यक्ति कभी भी सच नहीं है।
इवान डे ला क्रूज़

हम क्या संपादित कर सकते हैं ताकि हम पता लगा सकें, कि स्क्रॉल नीचे है। उदाहरण के लिए यदि स्क्रॉल 75% से कम है, तो इसे नीचे के पास पर विचार करें
iamsaksham

0
<!DOCTYPE HTML> 
<html> 
<head> 
    <title>JQuery | Detecting when user scrolls to bottom of div. 
    </title> 
</head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script> 

<body style="text-align:center;" id="body"> 
    <h1 style="color:green;">  
            Data Center  
        </h1> 
    <p id="data_center" style="font-size: 17px; font-weight: bold;"></p> 
    <center> 
        <div class="div" style="width:200px; height:150px; overflow:auto;"> 
            <h1>Hello Friends</h1> 
            <h1>Hello Friends</h1> 
            <h1>Hello Friends</h1> 
            <h1>Hello Friends</h1> 
            <h1>Hello Friends</h1> 
            <h1>Hello Friends</h1> 
            <h1>Hello Friends</h1> 
            <h1>Hello Friends</h1> 
            <h1>Hello Friends</h1> 
            <h1>Hello Friends</h1> 
            <h1>Hello Friends</h1> 
            <h1>Hello Friends</h1> 
            <h1>Hello Friends</h1> 
        </div> 
    </center> 
    <script> 
        $('#data_center').text('Scroll till bottom to get alert!'); 
        jQuery(function($) { 
            $('.div').on('scroll', function() { 
                if ($(this).scrollTop() + $(this).innerHeight() >=  $(this)[0].scrollHeight) {                     
                    alert('End of DIV has reached!'); 
                } 
            }); 
        }); 
    </script> 
</body> 

</html> 

यह मेरे लिए काम करता है, मुझे उम्मीद है, यह आपकी मदद भी करेगा। धन्यवाद।


0

ठीक है, मैंने अपने आप से वही पूछा, और मैंने इस तरह पाया, यहाँ मैंने एक घटना का उपयोग करके एक उदाहरण दिया:

let scrollableElement = document.querySelector(".elementScrollable")

scrollableElement.addEventListener("scroll",function(event){
  if(event.target.scrollTop === event.target.scrollTopMax){
        console.log("The scroll arrived at bottom")
  }
})


0

इसका समाधान मुझे https://www.geeksforgeeks.org/how-to-detect-when-user-scrolls-to-the-bottom-of-a-div/ पर मिला , मेरे लिए काम किया, आशा है कि यह आपके लिए भी काम करेगा। ।

$(window).on('scroll', function() { 
    if ($(window).scrollTop() >= $( 
        '.div').offset().top + $('.div'). 
        outerHeight() - window.innerHeight) { 
            alert('You reached the end of the DIV'); 
        } 
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.