ডিভি নীচে স্ক্রোল করা আছে কিনা আমি কীভাবে তা নির্ধারণ করতে পারি?


88

উল্লম্ব স্ক্রোলবারের সাথে কোনও ডিভিটি নীচে পুরোপুরি স্ক্রল করা থাকলে, jQuery বা অন্য কোনও জাভাস্ক্রিপ্ট লাইব্রেরি ব্যবহার না করে আমি কীভাবে নির্ধারণ করব?

আমার প্রশ্নটি কীভাবে নীচে স্ক্রোল করবেন তা নয়। আমি জানি যে কিভাবে করতে। আমি ডিভিটি ইতিমধ্যে নীচে স্ক্রোল করা হয়েছে কিনা তা নির্ধারণ করতে চাই।

এটা কাজ করে না:

if (objDiv.scrollTop == objDiv.scrollHeight) 

এখানে কেবল অনুমান করা হলে (اعتراضDiv.scrolTop> objDiv.scrolHeight) এবং স্ক্রোল থেকে কমানোর প্রয়োজন হতে পারে স্ক্রোল তীরের আকার (20px বলুন)
Itay Moav -Malimovka

উত্তর:


109

আপনি ব্যবহার খুব কাছাকাছি scrollTop == scrollHeight

scrollTop স্ক্রোল অবস্থানের শীর্ষকে বোঝায়, যা হবে scrollHeight - offsetHeight

আপনার যদি বিবৃতিটি দেখতে এমন হয় (ট্রিপল সমান ব্যবহার করতে ভুলবেন না):

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

সম্পাদনা: আমার উত্তর সংশোধন করা হয়েছে, সম্পূর্ণ ভুল ছিল


4
এটি প্রায় কাজ করে, স্ক্রোলহাইট-অফসেটহাইটটি স্ক্রোলটপের মতো বহুলভাবে একই মান নয়, তবে আপনার কোডটি চেষ্টা করার পরে যদি আমার প্রয়োজন হয় যে পার্থক্যটি এটির নীচে হওয়ার জন্য 5 পিক্সেলের চেয়ে কম হয় আমি চাই আচরণটি পেয়ে যাব।
বিয়ন্সের

4
এটি সঠিক নয়। obj.borderWidth বিবেচনা করা প্রয়োজন
লুপিং

4
আমি এই উত্তরটি পছন্দ করি: স্ট্যাকওভারফ্লো.com
ক্রিস

4
scrollTopঅ-অবিচ্ছেদ্য হতে পারে, সুতরাং এর জন্য obj.scrollHeight - obj.offsetHeight - obj.scrollTop < 1সমস্ত পরিস্থিতিতে কাজ করার জন্য কিছুটা সহনশীলতা প্রয়োজন (বলুন )। স্ট্যাকওভারফ্লো.com
ক্রিস মার্টিন

আমার লেআউটে স্থির উপাদানগুলির সাথে এটির কিছু করার বা আমি যা করতে চাইছি অন্যরকম কিছু করার কিছু আছে তবে কেবলমাত্র যখন শীর্ষে সমস্ত দিকে স্ক্রোল করা হয় কেবল তখনই এটি সত্যের মূল্যায়ন করে। এটি কারণ হ'ল আমার উদাহরণ (ক্রোম) এর document.body.scrollHeightসমানdocument.body.offsetHeight
ইভান দে লা ক্রুজ

26

সীমানা, অনুভূমিক স্ক্রোলবার এবং / অথবা ভাসমান পিক্সেল গণনার মতো বিষয়গুলিকে অ্যাকাউন্টে নেওয়ার সময় সঠিক ফলাফল পাওয়ার জন্য, আপনার ব্যবহার করা উচিত ...

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

দ্রষ্টব্য: আপনি যদি সঠিক ফলাফল পেতে চান তবে আপনাকে অফসেটহাইটের পরিবর্তে ক্লায়েন্টহাইট ব্যবহার করতে হবে। অফসেটহাইটটি তখনই আপনাকে সঠিক ফলাফল দেয় যখন এল এর কোন সীমানা বা অনুভূমিক স্ক্রোলবার না থাকে


এছাড়াও একমাত্র উত্তর যা আমার পক্ষে কাজ করেছিল। আমি স্ক্রোলবারটি লুকানোর জন্য প্যাডিং ব্যবহার করছি।
ক্রেগ

ক্লায়েন্টহাইট সত্যিই দুর্দান্ত কাজ করেছে। গৃহীত উত্তরে অফসেটহাইট ব্যবহার করে আমাকে এমন ফলাফল দিয়েছে যা 100% সঠিক ছিল না
Finlay Roelofs

মার্জিত, আপনাকে ধন্যবাদ .. আপনি এটিকে একটি স্ক্রোল ইভেন্টে @scroll="scrolling"scrolling(event) { event.target // as el in the answer }
ভ্যু

10

এই পার্টিতে কিছুটা দেরি হলেও, উপরোক্ত উত্তরগুলির মধ্যে কোনওটিই বিশেষত খুব ভাল কাজ করছে বলে মনে হয় না ...

  • ইউএসডি প্রদর্শনগুলির জন্য ওএসে ডিসপ্লে স্কেলিং প্রয়োগ করা হয়
  • স্কেলিং / জুম ব্রাউজারে প্রয়োগ করা হয়

সমস্ত ইভেন্টের জন্য সামঞ্জস্য করার জন্য, আপনাকে গণনা করা স্ক্রোল অবস্থানটি গোল করতে হবে:

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

এই উত্তরটি প্রথমটি যা সঠিকভাবে কাজ করে (আমি স্ট্যাকওভারফ্লো . com/q/5828275 এর উত্তরগুলিও পরীক্ষা করেছি)। অন্যরা যেমন উল্লেখ করেছে, মার্জিন, জুম এবং অন্যান্য বিষয়গুলি খেলায় আসে - এবং এটি তাদের সমস্ত পরিচালনা করে বলে মনে হয়। সম্পাদনা করুন: নীচে স্পেন্সারের উত্তরটি মূলত একই, সঠিকও বলে মনে হচ্ছে।
জান ব্রাডে

8

কোনও উপাদান যদি এর স্ক্রোলের শেষে থাকে তবে সত্য হয়, যদি তা না হয় তবে তা মিথ্যা।

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

মজিলা বিকাশকারী নেটওয়ার্ক


4
আমার জন্য, ক্রোম ব্যবহার করে, যেখানে উপাদানটি দস্তাবেজ body কেউ রয়েছে, এটি কার্যকর হয় না। document.body.scrollHeightএবং document.bodyclientHeightএকই মান আছে এবং তাই এক্সপ্রেশন কখনও সত্য হয় না।
ইভান দে লা ক্রুজ

আমরা কী সম্পাদনা করতে পারি যাতে আমরা সনাক্ত করতে পারি, সেই স্ক্রোলটি নীচের দিকে। উদাহরণস্বরূপ, যদি স্ক্রোলটি 75% এর নীচে থাকে তবে এটিকে নীচের দিকে বিবেচনা করুন
আইমশাক্ষাম

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'); 
        } 
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.