0

は?要求アニメーションフレームを取り消す最適化はありますか?

下記もしそうなら、この例window.cancelAnimationFrame();内の任意の利益(あるいは可能性が、どのように私はそこにそう、なぜでしょうか?

Ref: requestAnimationFrame MDN

var last_known_scroll_position = 0; 
var ticking = false; 

function doSomething(scroll_pos) { 
    // do something with the scroll position 
} 

window.addEventListener('scroll', function(e) { 
    last_known_scroll_position = window.scrollY; 
    if (!ticking) { 
    window.requestAnimationFrame(function() { 
     doSomething(last_known_scroll_position); 
     ticking = false; 
    }); 
    } 
    ticking = true; 
}); 

答えて

0

あなたは匿名を避けることができ直接doSomethingをrAFパラメータとして渡し、ticking = falseを直接doSomethingに含めることによって実現できます。

変数の宣言はwindow.scrollYなので、にパラメータを設定する必要はありません。last_known_scroll_position変数宣言を削除してください。 ところで、より広いブラウザサポートのためにpageYOffsetscrollYよりも使用する方が良いです。

これ以外の場合は、ロジックが適切です。

このフラグは、既に待機しているときに他の関数呼び出しを積み重ねることを避け、cancelAnimationFrameを使用すると、あまりにも早すぎるGCキックを強制するこの無名関数の作成であなたのメモリを不必要に埋めるだけです。

var ticking = false; 

function doSomething() { 
    ticking = false; 
    var scroll_pos = window.pageYOffset; 
    // do something with the scroll position 

} 

window.addEventListener('scroll', function(e) { 
    if (!ticking) { 
    window.requestAnimationFrame(doSomething); 
    } 
    ticking = true; 
}); 
+0

シモンズ::すべてが適用されると

だから、あなたが何かのように持っているより一般的なスロットラーのために、私は[こちら] 1を(書いたhttp://stackoverflow.com/a/38626349/ 3702797) – Kaiido

関連する問題