Javascript JS定时器,clearInterval()不';Don’我不能清除计时器。重新启动时,它将恢复,而不是在零位重新启动

Javascript JS定时器,clearInterval()不';Don’我不能清除计时器。重新启动时,它将恢复,而不是在零位重新启动,javascript,oop,timer,Javascript,Oop,Timer,标题已经说明了这一点。我正在使用一个计时器,但当我让它运行大约10秒时,按空格键(空格=键码13),然后它停止,如果我再次按空格键启动,它会继续运行,但随后+2秒。(例如,从18秒开始,从20秒开始恢复)这是从clearInterval ID返回的,我认为。。。不确定。 如果你们能帮我,那太好了 如果你有任何不同做法的建议,也请告诉我 我愿意接受我得到的所有反馈和关于我代码的改进/提示!:) Javascript var Timer = function() { var self = this

标题已经说明了这一点。我正在使用一个计时器,但当我让它运行大约10秒时,按空格键(空格=键码13),然后它停止,如果我再次按空格键启动,它会继续运行,但随后+2秒。(例如,从18秒开始,从20秒开始恢复)这是从clearInterval ID返回的,我认为。。。不确定。

如果你们能帮我,那太好了

如果你有任何不同做法的建议,也请告诉我

我愿意接受我得到的所有反馈和关于我代码的改进/提示!:)

Javascript

var Timer = function() {

var self = this,
    div = document.querySelector('.timer'),
    hours, minutes, seconds, millsecs;

this.oldDate = new Date().getTime();
this.newDate;

this.isRunning = false;

this.time;

this.timerId = 0;

this.start = function() {
    self.isRunning = true;
    if (self.isRunning) {
        self.timerId = setInterval(function() {

            self.time = new Date().getTime() - self.oldDate;
            self.time = self.time.toString();

            millsecs= self.time.substr(-3);
            seconds = (Math.floor(self.time / 1000) % 60) + '.';
            minutes = (self.time >= 60000) ? (Math.floor(self.time / (1000*60)) % 60) + ':' : '';
            hours   = (self.time >= 86400) ? (Math.floor(self.time / (1000*60*60)) % 24) + ':' : '';

            div.innerHTML = hours + minutes + seconds + millsecs;
        }, 10);
    }
}

this.stop = function() {
    self.isRunning = false;
    clearInterval(obj.timerId);
    self.timerId = 0;
    }

};




var obj = new Timer();

window.addEventListener('keyup', function(e) {

    if(e.keyCode == 32 && obj.isRunning == false) {
       obj.start();
    }

    else if (e.keyCode == 32 && obj.isRunning == true) {
        obj.stop();
    }

});

请使用文本样式突出显示问题的重要部分..使用setTimeout或setInterval进行如此小的延迟是不可靠的。此外,它也会无缘无故地阻止CPU休眠。使用requestAnimationFrame。