SetInterval()から関数を呼び出したいのですが。アイデアは次のとおりです。
class Greeter {
element: HTMLElement;
span: HTMLElement;
timerToken: number;
constructor(element: HTMLElement) {
this.element = element;
this.element.innerHTML += "The time is: ";
this.span = document.createElement('span');
this.element.appendChild(this.span);
this.span.innerText = new Date().toUTCString();
//this.element.style.cssText = "-webkit-transform:rotate(7deg)";
//this.element.style.transition = "-webkit-transform: rotate(180deg)";
}
start() {
this.timerToken = setInterval(this.runningLoop(this.element), 500);
}
stop() {
clearTimeout(this.timerToken);
}
runningLoop(element: HTMLElement) {
this.element.style.cssText = "-webkit-transform:rotate(7deg)";
}
}
window.onload = () => {
var el = document.getElementById('content');
var greeter = new Greeter(el);
greeter.start();
};
この場合、例外が発生します。
13行9列の未処理の例外。MicrosoftJScriptランタイムエラー:引数が無効です。
だから私は次のように試しました:
this.timerToken = setInterval(function () { this.runningLoop(this.element) }.bind, 500);
例外はありませんが、何も起こりません。
何か案は ?
setInterval(this.runningLoop(this.element), 500);
上記は、setInterval
に渡す前にthis.runningLoop
を呼び出し、setInterval
は関数を期待していますが、undefined
を受信しています。呼び出しを矢印関数でラップします。
setInterval(() => this.runningLoop(this.element), 500);
また、runningLoop
で要素引数を使用していないため、引数を削除してメソッドをsetInterval
..に渡すことができます。
setInterval(this.runningLoop, 500);
これは、必要な時間にループします。setInterval(()=> function()、time in miliseconds);
さて、いつでもやめたいなら!間隔の前に変数を記述します。TSファイルの先頭で宣言します。varInterval:any; this.varInterval = setInterval(()=> function()、ミリ秒単位の時間);
次のようにメソッドを呼び出して停止できます。clearInterval(this.varInterval);
これは私のために働きます!