Debounce decorator
debounce(f, ms) ãã³ã¬ã¼ã¿ã®çµæã¯ãms ããªç§æ¯ã«æå¤§ä¸åº¦ f ã¸ã®å¼ã³åºããæ¸¡ãã©ããã¼ã§ãã
è¨ãæããã¨ãâããã¦ã³ã¹â 颿°ãå¼ã³åºãã¨ãæãè¿ã ms ããªç§ã¾ã§ã®ä»ã®æªæ¥ã¯ãã¹ã¦ç¡è¦ããããã¨ãä¿è¨¼ããã¾ãã
ä¾:
let f = debounce(alert, 1000);
f(1); // ããã«å®è¡ããã
f(2); // ç¡è¦ããã
setTimeout( () => f(3), 100); // ç¡è¦ããã (100 ms ã ãçµéãã)
setTimeout( () => f(4), 1100); // å®è¡ããã
setTimeout( () => f(5), 1500); // ç¡è¦ããã (æå¾ã®å®è¡ãã 1000ms çµéãã¦ããªã)
å®è·µã«ããã¦ãdebounce ã¯ãã®ãããªçãæéã®ä¸ã§æ°ãããã¨ãã§ããªããã¨ãç¥ã£ãã¨ãã«ãä½ããåå¾/æ´æ°ãã颿°ã«å¯¾ãã¦å½¹ç«ã¡ã¾ã,ãªã½ã¼ã¹ãç¡é§ã«ããªãããã«ã
function debounce(f, ms) {
let isCooldown = false;
return function() {
if (isCooldown) return;
f.apply(this, arguments);
isCooldown = true;
setTimeout(() => isCooldown = false, ms);
};
}
debounce å¼ã³åºãã¯ã©ããã¼ãè¿ãã¾ããããã«ã¯2ã¤ã®ç¶æ
ãããã¾ã:
isCooldown = falseâ å®è¡ããæºåãã§ãã¦ããisCooldown = trueâ ã¿ã¤ã ã¢ã¦ããå¾ ã£ã¦ãã
æåã®å¼ã³åºãã§ã isCooldown ã¯å½ãªã®ã§ãå¼ã³åºãã¯å¦çãããç¶æ
㯠true ã«ãªãã¾ãã
isCooldown ã true ã®éããã¹ã¦ã®ä»ã®å¼ã³åºãã¯ç¡è¦ããã¾ãã
ãã®å¾ãä¸ããããé
å»¶å¾ã« setTimeout ãããã false ã«æ»ãã¾ãã
function debounce(f, ms) {
let isCooldown = false;
return function() {
if (isCooldown) return;
f.apply(this, arguments);
isCooldown = true;
setTimeout(() => isCooldown = false, ms);
};
}
ãµã³ãããã¯ã¹ã§ãã¹ãã¨ä¸ç·ã«è§£çãéã