javascript高級---関数の手ぶれと関数の節流を防ぎます.
1039 ワード
いくつかの特定の場面で紹介します.関数は頻繁に呼び出されるかもしれません.コールバック中にDOM操作が発生し、ブラウザは次に並べ替えと描き直して、深刻な性能問題を引き起こします.
二、実例:window.onresize/window.onscroll、頻繁なonmousemove onkeyup
類似問題を解決する:関数の手ぶれ防止、関数の流れ、コアは一つの関数を制限する頻繁なトリガです.
関数の手ぶれ:
名前を考えて、関数を使ってディザ防止を実現して、関数を触発する時、元素の位置あるいはサイズは変化が発生して、ページが逆流することを招いて、更に元素が震えて、関数を通じて(通って)震えを防ぎます.
タイマー遅延による現在の関数の実行
関数の実行頻度を制限します.現在の関数が実行されていない場合、将来の実行は無視されます.
二、実例:window.onresize/window.onscroll、頻繁なonmousemove onkeyup
類似問題を解決する:関数の手ぶれ防止、関数の流れ、コアは一つの関数を制限する頻繁なトリガです.
関数の手ぶれ:
名前を考えて、関数を使ってディザ防止を実現して、関数を触発する時、元素の位置あるいはサイズは変化が発生して、ページが逆流することを招いて、更に元素が震えて、関数を通じて(通って)震えを防ぎます.
タイマー遅延による現在の関数の実行
function debounce(fun, time = 800){
clearTimeout(fun.timer)
fun.timer = setTimeout(function = > {
fun()
},time)
}
debounce(scroll())
関数の手ぶれ防止が基本的に実現され、現在のイベントオブジェクトはundefinedで、強制的にthisをバインドし、パラメータを与えられていることが分かります.function debounce(fun, time = 800){
clearTimeout(fun.timer)
fun.timer = setTimeout(function = > {
fun.apply(this,arguments)
},time)
}
debounce(scroll())
関数の流れ:関数の実行頻度を制限します.現在の関数が実行されていない場合、将来の実行は無視されます.
function throttle(fun, time = 800) {
if (fun.timer) return
fun.timer = setTimeout(function = > {
fun.apply(this,arguments)
clearTimeout(fun.timer)
},time)
}
debounce(scroll())