এই প্রশ্নের 30 টিরও বেশি উত্তর রয়েছে এবং আমি কেউই ব্যবহার করছি না এমন আশ্চর্যরকম সহজ, খাঁটি জেএস সমাধান ব্যবহার করেন। এটি সমাধানের জন্য jQuery লোড করার দরকার নেই, অন্য অনেকে চাপ দিচ্ছেন বলে।
উপাদানটি ভিউপোর্টের মধ্যে রয়েছে কিনা তা জানানোর জন্য, আমাদের অবশ্যই প্রথমে শরীরের মধ্যে উপাদানগুলির অবস্থান নির্ধারণ করতে হবে। আমি একবার চিন্তা করেছিলাম হিসাবে আমাদের এটিকে পুনরাবৃত্তভাবে করার দরকার নেই। পরিবর্তে, আমরা ব্যবহার করতে পারেন element.getBoundingClientRect()
।
pos = elem.getBoundingClientRect().top - document.body.getBoundingClientRect().top;
এই মানটি হ'ল বস্তুর শীর্ষ এবং দেহের শীর্ষের মধ্যে ওয়াই পার্থক্য।
আমাদের তখন অবশ্যই বলতে হবে যে উপাদানটি দেখার মধ্যে রয়েছে। বেশিরভাগ বাস্তবায়ন জিজ্ঞাসা করে যে সম্পূর্ণ উপাদানটি ভিউপোর্টের মধ্যে রয়েছে কিনা, তাই এটিই আমরা coverেকে রাখব।
প্রথমত, উইন্ডোর শীর্ষ অবস্থানটি হ'ল: 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
নিজের উপাদানটিতে কোনও শ্রেণি যুক্ত করতে বা সরাতে যুক্তিটি সম্পাদন করতে পারেন , যা আপনি পরে নিজের সিএসএসে রূপান্তর প্রভাব সহ পরিচালনা করতে পারবেন।
আমি পুরোপুরি বিস্মিত হয়েছি যে আমি এই সমাধানটি অন্য কোথাও পাইনি, তবে আমি বিশ্বাস করি যে এটিই সবচেয়ে পরিষ্কার এবং কার্যকর সমাধান, এবং এটি আপনাকে jQuery লোড করার প্রয়োজন হয় না!