打字稿节拍器

时间:2016-12-01 21:35:07

标签: javascript loops angular typescript delay

我试图使用Typescript(和Angular 2)构建一个节拍器。 谢谢,@ Nitzan-Tomer(Typescript Loop with Delay),他帮助我完成了基础知识。

现在我正面临这个问题,在我开始节拍器之后,我无法改变间隔。想象一下滑块,改变声音之间的速度(=>间隔)。

let theLoop: (i: number) => void = (i: number) => {
    setTimeout(() => {
        metronome.play();
        if (--i) {
            theLoop(i);
        }
    }, 3000);
};

theLoop(10);

此处的间隔为3000.我希望能够在触发功能后更改它。 (也许还可以摆脱i: number?因为它不应该只播放节拍器声音10次......

我想到了一堂课?但我不确定如何构建它......

1 个答案:

答案 0 :(得分:2)

这是一个简单的课程:

class Metronome {
    private interval: number;
    private timer: number;

    constructor(interval = 3000) {
        this.interval = interval;
    }

    start(): void {
        this.tick();
    }

    stop() {
        clearTimeout(this.timer);
    }

    setInterval(interval: number) {
        this.interval = interval;
    }

    private tick() {
        // do something here
        this.timer = setTimeout(this.tick.bind(this), this.interval);
    }
}

code in playground