මෙම ප්රශ්නයට පිළිතුරු 30 කට වඩා ඇති අතර, ඒ කිසිවක් මා භාවිතා කර ඇති පුදුමාකාර සරල, පිරිසිදු JS විසඳුම භාවිතා නොකරයි. තවත් බොහෝ අය තල්ලු කරමින් සිටින බැවින් මෙය විසඳීම සඳහා 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()
ක්රමය . මෙම ක්රමය දීර් time කාලයක් තිස්සේ පැවතුන බැවින් ඔබගේ බ්රව්සරය එයට සහාය නොදැක්වීම ගැන කරදර විය යුතු නැත.
දැන්, අපගේ මූලද්රව්යයේ ඉහළම ස්ථානය:
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 හි සංක්රාන්ති බලපෑම් සමඟ හැසිරවිය හැකිය.
මම වෙනත් තැනක මෙම විසඳුම සොයා නොගැනීම ගැන මම පුදුම වෙමි, නමුත් මෙය වඩාත්ම පිරිසිදු හා effective ලදායී විසඳුම බව මම විශ්වාස කරමි, තවද ඔබට jQuery පැටවීම අවශ්ය නොවේ!