0
在我的網站上,一個相關的內容框應該在視口可見時進行動畫處理。60fps:如何正確使用requestAnimationFrame?
我試圖通過CSS和JavaScript使我的動畫儘可能高效,這樣它就不會負面影響滾動性能。
儘管CSS部分很簡單(使用transform,will-change,contains),但我在使用window.requestAnimationFrame
時掙扎了一下。
只有當類添加到元素中時,或者在函數isScrolledIntoView
被調用時,或者甚至在isScrolledIntoView
中,何時測量元素位置,我才應該使用它嗎?
var percentVisible = 0.25;
window.addEventListener('scroll', function(){
relatedContent(related, percentVisible);
}
)
function relatedContent(r, pV){
window.requestAnimationFrame(function() {
if(isScrolledIntoView(r, pV)){
window.requestAnimationFrame(function(){
r.classList.add("visible");
}, r)
}
}, r)
}
function isScrolledIntoView(el, percentV) {
var elemTop, elemBottom, elemHeight, overhang, isVisible;
/*window.requestAnimationFrame(
function(){*/
elemTop = el.getBoundingClientRect().top;
elemBottom = el.getBoundingClientRect().bottom;
elemHeight = el.getBoundingClientRect().height;
/*}
);*/
overhang = elemHeight * (1 - percentV);
isVisible = (elemTop >= -overhang) && (elemBottom <= window.innerHeight + overhang);
return isVisible;
}