Throttle nedir? Debounce'tan farkı nedir? Bir throttle fonksiyonu yazın.
Cevap
- Debounce: olaylar durduktan belirli bir süre sonra bir kez çalışır. Arama kutusu için idealdir.
- Throttle: olaylar devam etse bile fonksiyonu belirli aralıklarla en fazla bir kez çalıştırır. Scroll, resize, mousemove gibi sürekli olaylar için uygundur.
function throttle(fn, ms) {
let son = 0;
let bekleyen = null;
return function (...args) {
const simdi = Date.now();
const kalan = ms - (simdi - son);
if (kalan <= 0) {
son = simdi;
fn.apply(this, args);
} else if (!bekleyen) {
bekleyen = setTimeout(() => {
son = Date.now();
bekleyen = null;
fn.apply(this, args);
}, kalan);
}
};
}
window.addEventListener("scroll", throttle(konumuGuncelle, 100));Son satırdaki setTimeout, aralığın sonunda gelen son olayın da kaybolmamasını (trailing call) sağlar.
İlgili JavaScript soruları
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.