Window: setInterval() ã¡ã½ãã
Baseline
åºãå©ç¨å¯è½
*
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
* ãã®æ©è½ã®ä¸é¨ã¯ã対å¿ã¬ãã«ãç°ãªãå ´åãããã¾ãã
setInterval() 㯠Window ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¡ã½ããã§ãä¸å®ã®ééãç½®ãã¦é¢æ°ãã³ã¼ãã¹ãããããç¹°ãè¿ãå¼ã³åºãã¾ãã
æ§æ
setInterval(code)
setInterval(code, delay)
setInterval(func)
setInterval(func, delay)
setInterval(func, delay, arg1)
setInterval(func, delay, arg1, arg2)
setInterval(func, delay, arg1, arg2, /* â¦, */ argN)
弿°
func-
delayããªç§ãçµéãããã³ã«å®è¡ãã颿°ã§ããæåã®å®è¡ã¯delayããªç§å¾ã«è¡ããã¾ãã code-
颿°ã®ä»£ããã«æååãå«ããæ§æã許容ããã¦ããã
delayããªç§ãçµéãããã³ã«æååãã³ã³ãã¤ã«ãã¦å®è¡ãã¾ãã ãã®æ§æã¯æ¨å¥¨ãã¾ãããeval()ã®ä½¿ç¨ã«ã»ãã¥ãªãã£ä¸ã®ãªã¹ã¯ãããã®ã¨åãçç±ã§ãã delayçç¥å¯-
æå®ãã颿°ã¾ãã¯ã³ã¼ããå®è¡ããåã«ã¿ã¤ãã¼ãå¾ ã¤ã¹ãæéãããªç§ (1/1000 ç§) åä½ã§æå®ãã¾ããæå®ãããªãã£ãå ´åã®æ¢å®å¤ã¯ 0 ã§ãã
delayå¤ã§è¨±ãããç¯å²ã«ã¤ãã¦ã®è©³ç´°ã¯ãå¾ ã¡æéã®å¶ç´ãã覧ãã ããã arg1, â¦,argNçç¥å¯-
ã¿ã¤ãã¼ãæºäºããã¨ãã«ã func ã§æå®ãã颿°ã«æ¸¡ã追å ã®å¼æ°ã§ãã
è¿å¤
setInterval() ã¡ã½ããã¯ãå¼ã³åºãã«ãã£ã¦ä½æãããã¤ã³ã¿ã¼ãã«ã¿ã¤ãã¼ã䏿ã«èå¥ããæ£ã®æ´æ°ï¼é常㯠1 ãã 2,147,483,647 ã®ç¯å²ï¼ãè¿ãã¾ãããã®èå¥åã¯ããããã¤ã³ã¿ã¼ãã« IDãã¨å¼ã°ãã clearInterval() ã«æ¸¡ããã¨ã§ãæå®ãã颿°ã®å復å®è¡ã忢ãããã¨ãã§ãã¾ãã
åãã°ãã¼ãã«ç°å¢ï¼ç¹å®ã®ã¦ã£ã³ãã¦ãã¯ã¼ã«ã¼ãªã©ï¼ã§ã¯ãå ã®ã¿ã¤ãã¼ãã¢ã¯ãã£ãã§ããéããã¤ã³ã¿ã¼ãã« ID ã¯ç¢ºå®ã«ä¸æã¨ãªããããæ°ããã¤ã³ã¿ã¼ãã«ã¿ã¤ãã¼ã«ã¯åå©ç¨ããã¾ããããã ããã°ãã¼ãã«ç°å¢ãç°ãªãã¨ãããããç¬ç«ããã¤ã³ã¿ã¼ãã« ID ã®ãã¼ã«ã管çããã¾ãã
setInterval() 㨠setTimeout() ã¯åã ID ãã¼ã«ãå
±æãã¦ããã clearInterval() 㨠clearTimeout() ã¯æè¡çã«å
¥ãæ¿ãã¦ä½¿ç¨ã§ãããã¨ã«æ³¨æãã¦ãã ããã
ãã ãæç¢ºãã®ããã«ãã³ã¼ããæ´åããã¨ãã¯æ··ä¹±ãé¿ããããã常ã«ä¸è´ãããããã«ããã¹ãã§ãã
ã¡ã¢:
弿° delay ã¯ã符å·ä»ã 32 ãããæ´æ°ã«å¤æããã¾ãã
IDL ã«ããã符å·ä»ãæ´æ°ã®å®ç¾©ã«ãã£ã¦ãdelay ã¯äºå®ä¸ 2147483647msãããã 24.8 æ¥ã«å¶éããã¾ãã
ä¾
>ä¾ 1: åºæ¬çãªæ§æ
以ä¸ã®ä¾ã¯ã setInterval() ã®åºæ¬çãªæ§æã示ãã¾ãã
const intervalID = setInterval(myCallback, 500, "Parameter 1", "Parameter 2");
function myCallback(a, b) {
// ããã«ã³ã¼ããè¨è¿°ãã¾ãã
// 弿°ã¯å®å
¨ã«çç¥å¯è½ã§ãã
console.log(a);
console.log(b);
}
ä¾ 2: 2 ã¤ã®è²ãåãæ¿ãã
以ä¸ã®ä¾ã¯åæ¢ãã¿ã³ãæ¼ãã¾ã§ã1 ç§ããã« flashtext() 颿°ãå¼ã³åºãã¾ãã
HTML
<div id="my_box">
<h3>Hello World</h3>
</div>
<button id="start">éå§</button>
<button id="stop">忢</button>
CSS
.go {
color: green;
}
.stop {
color: red;
}
JavaScript
// intervalID ãæ ¼ç´ãã夿°
let intervalId;
function changeColor() {
// æ¢ã«ã¤ã³ã¿ã¼ãã«ãã»ããã¢ããããã¦ãããã©ãããæ¤æ»
intervalId ??= setInterval(flashText, 1000);
}
function flashText() {
const oElem = document.getElementById("my_box");
oElem.className = oElem.className === "go" ? "stop" : "go";
}
function stopTextColor() {
clearInterval(intervalId);
// 夿°ãã intervalID ãè§£æ¾
intervalId = null;
}
document.getElementById("start").addEventListener("click", changeColor);
document.getElementById("stop").addEventListener("click", stopTextColor);
çµæ
"this" åé¡
setInterval() ã«ï¼ãã£ã¨è¨ãã¨ä»ã®ã©ããªé¢æ°ã§ãï¼ã¡ã½ãããæ¸¡ãã¨ãééã£ã this ã®å¤ã§å¼ã³åºããããã¨ãããã¾ãã
ãã®åé¡ã¯ JavaScript ãªãã¡ã¬ã³ã¹ã§è©³ãã説æãã¦ãã¾ãã
解説
setInterval() ã«ãã£ã¦å®è¡ãããã³ã¼ãã¯ãå¼ã³åºãå
ã¨ã¯å¥ã®å®è¡ã³ã³ããã¹ãå
ã§å®è¡ããã¾ãããã®çµæãå¼ã³åºããã颿°ã® this ãã¼ã¯ã¼ã㯠window ï¼ã¾ã㯠globalï¼ãªãã¸ã§ã¯ãã«è¨å®ããã¾ãããã㯠setTimeout ãå¼ã³åºãã颿°ã¨ã¯ this ã®å¤ãç°ãªãã¾ãã以ä¸ã®ä¾ãã覧ãã ããï¼ããã§ã¯ setInterval() ã§ã¯ãªã setTimeout() ã使ç¨ãã¦ãã¾ãããã©ã¡ãã®ã¿ã¤ãã¼ã§ãåé¡ã¯åãã§ãï¼ã
myArray = ["zero", "one", "two"];
myArray.myMethod = function (sProperty) {
alert(arguments.length > 0 ? this[sProperty] : this);
};
myArray.myMethod(); // "zero,one,two" ã¨è¡¨ç¤º
myArray.myMethod(1); // "one" ã¨è¡¨ç¤º
setTimeout(myArray.myMethod, 1000); // "[object Window]" 㨠1 ç§å¾ã«è¡¨ç¤º
setTimeout(myArray.myMethod, 1500, "1"); // "undefined" 㨠1.5 ç§å¾ã«è¡¨ç¤º
// 'this' ãªãã¸ã§ã¯ãã .call ã§æ¸¡ãã¦ãåä½ãã¾ããã
// ããã¯ã myArray.myMethod å
ã® this ã®å¤ã夿´ãããã®ã«ã
// setTimeout èªä½ã®ä¸ã§ this ã®å¤ã夿´ããã¦ãã¾ãããã§ãã
// å®éãsetTimeout ã®ã³ã¼ãã¯ãããã¦ã£ã³ãã¦ãªãã¸ã§ã¯ãã§ãããã¨ãæå¾
ãã¦ãããããã¨ã©ã¼ã«ãªãã¾ãã
setTimeout.call(myArray, myArray.myMethod, 2000); // ã¨ã©ã¼: "NS_ERROR_XPC_BAD_OP_ON_WN_PROTO: Illegal operation on WrappedNative prototype object"
setTimeout.call(myArray, myArray.myMethod, 2500, 2); // åãã¨ã©ã¼
ãã®ä¾ã§ãããã¨ãããæ§æ¥ã® JavaScript ã§ã³ã¼ã«ããã¯é¢æ°ã« this ãªãã¸ã§ã¯ããæ¸¡ãæ¹æ³ã¯ããã¾ããã
åããã解決ç
æè¿ã® JavaScript ã©ã³ã¿ã¤ã ã¯ãã¹ã¦ï¼ãã©ã¦ã¶ã¼ã¨ããã以å¤ãå«ãï¼ãã¢ãã¼é¢æ°ã¨ this 表è¨ã¨çµã¿åãããã¨ã myArray ã¡ã½ããã®å
é¨ã«ããå ´å㯠setInterval(() => this.myMethod()) ã¨è¨è¿°ãããã¨ãå¯è½ã§ãã
IE ã«å¯¾å¿ããå¿
è¦ãããå ´åã¯ãFunction.prototype.bind() ã¡ã½ããã使ç¨ããã¨ãä¸ãããã颿°ã¸ã®ãã¹ã¦ã®å¼ã³åºãã«å¯¾ã㦠this ã¨ãã¦ä½¿ç¨ããå¤ãæå®ãããã¨ãã§ãã¾ããããã«ããã颿°ãå¼ã³åºãããã¨ãã®ã³ã³ããã¹ãã«ãã£ã¦ this ãä½ã§ããããä¸æç¢ºãªåé¡ãç°¡åã«åé¿ãããã¨ãã§ãã¾ãã
使ç¨ä¸ã®ã¡ã¢
setInterval() 颿°ã¯ä¸è¬ã«ãã¢ãã¡ã¼ã·ã§ã³ã®ããã«ä½åº¦ãå®è¡ããã颿°ã®ããã«å¾
ã¡æéãè¨å®ããã®ã«ä½¿ããã¾ãã clearInterval() ã使ã£ã¦ã¤ã³ã¿ã¼ãã«ãåãæ¶ããã¨ãã§ãã¾ãã
æå®æéå¾ã«ä¸åº¦ã ã颿°ãå¼ã³åºãããå ´åã«ã¯ã setTimeout() ã使ç¨ãã¦ãã ããã
å¾ ã¡æéã®å¶ç´
setInterval() ã®ã³ã¼ã«ããã¯ã¯é çªã« setInterval() ãå¼ã³åºããæåã®ã¤ã³ã¿ã¼ãã«ãã¾ã é²è¡ä¸ã§ãã£ã¦ããå¥ã®ã¤ã³ã¿ã¼ãã«ãéå§ããããã¨ãã§ãã¾ãããã®ãã¨ãããã©ã¼ãã³ã¹ã«ä¸ããæ½å¨çãªå½±é¿ã軽æ¸ããããã«ãã¤ã³ã¿ã¼ãã«ã 5 ã¬ãã«ãè¶
ãã¦ãã¹ããããã¨ããã©ã¦ã¶ã¼ã¯èªåçã«ã¤ã³ã¿ã¼ãã«ã®æå°å¤ã¨ã㦠4 ããªç§ãå¼·å¶ããããã«ãªãã¾ããæ·±ããã¹ãããã setInterval() ã®å¼ã³åºãã§ 4ms æªæºã®å¤ãæå®ãããã¨ããã¨ã 4ms ã«åºå®ããã¾ãã
ãã©ã¦ã¶ã¼ã¯ãç¶æ³ã«ãã£ã¦ã¯ããã«å³ããæå°ééå¤ãå¼·å¶ããããããã¾ããããããã¯ä¸è¬çãªãã¨ã§ã¯ããã¾ãããã¾ããã³ã¼ã«ããã¯ã®å¼ã³åºãã®éã«çµéããå®éã®æéã¯ãä¸ãããã delay ãããé·ããããããªããã¨ã«æ³¨æãã¦ãã ãããä¾ã«ã¤ãã¦ã¯å¾
ã¡æéãæå®å¤ããé·ãçç±ãåç
§ãã¦ãã ããã
å®è¡æéãã¤ã³ã¿ã¼ãã«ãã確å®ã«çããã
ãã¸ãã¯ã®å®è¡æéãã¤ã³ã¿ã¼ãã«æéããé·ããªãå¯è½æ§ãããå ´åã¯ãsetTimeout() ã使ç¨ãã¦ååä»ã颿°ãå帰çã«å¼ã³åºããã¨ãæ¨å¥¨ãã¾ããä¾ãã° 5 ç§ããã«ãªã¢ã¼ããµã¼ãã¼ã¸æ¥ç¶ããããã« setInterval() ã使ç¨ããå ´åããããã¯ã¼ã¯ã®é
å»¶ããµã¼ãã¼ã®å¿çããªããªã©ãã¾ãã¾ãªåé¡ã§ãå²ãå½ã¦ãããæéå
ã«ãªã¯ã¨ã¹ããå®äºããªãå¯è½æ§ãããã¾ãããã®ãããå¿
ãããé çªã©ããã«ã¯è¿ããªã XHR ãªã¯ã¨ã¹ãããã¥ã¼å
ã«ãããã¨ã«æ°ã¥ãããããã¾ããã
ãã®å ´åã¯ãå帰ç㪠setTimeout() ã®ãã¿ã¼ã³ãæ¨å¥¨ãã¾ãã
(function loop() {
setTimeout(() => {
// Your logic here
loop();
}, delay);
})();
ãã®ã³ã¼ãã¹ããããã§ã¯ãååä»ã颿° loop() ã宣è¨ãã¦ç´ã¡ã«å®è¡ãã¾ããloop() ã¯ãã¸ãã¯ãå®å
¨ã«å®è¡ãããå¾ã«ãå
é¨ã® setTimeout() ã«ãã£ã¦å帰å¼ã³åºãããã¾ãããã®ãã¿ã¼ã³ã¯ä¸å®ã®ééã§å¼ã³åºããã¨ãä¿è¨¼ããã¾ããããå帰å¼ã³åºãã®åã«åã®å®è¡ãå®äºãããã¨ãä¿è¨¼ããã¾ãã
仿§æ¸
| 仿§æ¸ |
|---|
| HTML > # dom-setinterval-dev > |