2016-10-14 61 views
0

我使用jQuery scrollTop的()值來改變頁面滾動的元素透明度jQuery的scrollTop的()精度快速滾動頁面時(避免像素損失)

$(document).on('scroll', function(){ 
    if($(document).scrollTop() >= 1){ 
     $('#elem').css({'opacity': ($(document).scrollTop() * 0.02)}); 
    } 
}); 

它工作正常,但問題是,如果我快速滾動頁面會「跳過」很多像素,導致一個醜陋的效果,因爲返回的像素是例如

0 
30 
50 
80 
90 
... 

,而不是

0 
1 
2 
3 
4 

就像當我慢慢地滾動...

而且其他時間我有同樣的問題,在這裏我需要平滑值,但這種「像素跳躍」的行爲複雜化東西...

我該如何解決這個問題?

+1

不幸的是,這是不可能的。出於性能原因,每次更新UI時都會讀取該值,而不是每個像素滾動時的值。這意味着像素將在更新之間跳過。對此你無能爲力。爲了解決這個問題,你可以在'opacity'值上使用CSS''transition'來使調整更順暢 –

+0

哦,那聽起來很糟糕...... :(此時我不知道該怎麼做 – neoDev

回答

2

如果你想讓事情平滑,你應該添加一個CSS過渡到元素。因此,即使滾動從0跳到500,轉換仍然平穩。

#elem { 
    -webkit-transition: opacity 0.5s ease; 
    -moz-transition: opacity 0.5s ease; 
    transition: opacity 0.5s ease; 
} 

試圖在jQuery中實現平滑的像素值不會工作。

+0

謝謝@ rory已經我可以使用css轉換來「僞裝」像素丟失,但即使這可能對我的實際項目是可以的,但在其他情況下也不行,例如移動元素 – neoDev

+1

@neoDev如果您同時使用兩個元素轉換+過渡css規則 – Jesse

+0

是的,我知道,但有時我肯定會需要使用這個沒有任何過渡。 – neoDev