Javascript clearInterval()后恢复计时器

Javascript clearInterval()后恢复计时器,javascript,stopwatch,Javascript,Stopwatch,clearInterval功能仅停止代码中的计时器,而不是实际时间。单击stop按钮后,计时器停止,但它似乎仍在后台运行。当我再次单击start按钮时,它不会从停止的位置恢复,而是显示在后台运行的实际时间。请参阅代码中的操作 再次单击开始按钮,点击停止按钮后,如何真正停止计时器并恢复计时器 var timestart=new Date(); 函数start(){ 已启动=窗口设置间隔(时钟运行,10); } 函数停止(){ 窗口。clearInterval(已启动); } 函数clockRun

clearInterval
功能仅停止代码中的计时器,而不是实际时间。单击
stop
按钮后,计时器停止,但它似乎仍在后台运行。当我再次单击
start
按钮时,它不会从停止的位置恢复,而是显示在后台运行的实际时间。请参阅代码中的操作

再次单击
开始
按钮,点击
停止
按钮后,如何真正停止计时器并恢复计时器

var timestart=new Date();
函数start(){
已启动=窗口设置间隔(时钟运行,10);
}
函数停止(){
窗口。clearInterval(已启动);
}
函数clockRunning(){
currentTime=新日期()
,timeappeased=新日期(currentTime-timebegind)
,hour=timepassed.getUTCHours()
,min=timeappeased.getUTCMinutes()
,sec=timeappeased.getUTCSeconds()
,ms=timeappeased.getutcmillesons();
document.getElementById(“显示区域”).innerHTML=
(小时>9小时:“0”+小时)+“:”+
(最小值>9?最小值:“0”+最小值)+“:”+
(秒>9秒:“0”+秒)+”
(ms>99?ms:ms>9?“0”+ms:“00”+ms);
};
函数重置(){
窗口。clearInterval(已启动);
运行=0;
小时=分钟=秒=毫秒=0;
document.getElementById(“显示区域”).innerHTML=“00:00:00.000”;
}

秒表
#显示区{字体大小:20pt;}
00:00:00.000
开始
停止
重置

这是因为您从未重置
timestart
。您将继续在开始时间使用相同的值

您需要将此值设置为
start()
内的当前时间,否则您只是使用加载页面的时间作为参考时间,而不是上次调用
start()
的时间

var timeBegan;

function start() {
    timeBegan = new Date();
    started = window.setInterval(clockRunning, 10);
}
或者,您可以在
reset()
中执行此操作,然后单击“停止”按钮,然后单击“开始”按钮,将更像一个圈速计时器;你可以冻结时间,但在后台它会一直计数,直到你点击重置按钮


如果您希望“停止”按钮暂停计时器,那么在单击“停止”时,您需要在某处记录当前持续时间。然后在
clockRunning()
函数中,您可以将此持续时间添加到时间减法计算结果中。(当然,
reset()
应该清除此存储的持续时间。)

与当前的
timeappeased
实现不同,您需要的是为
timeappeased
的每次调用设置一个求和计数器,您可以将上次调用的
clockRunning
时间差添加到
TimePassed

  • start
    应启动/恢复
    clockRunning
    函数调用
  • clockRunning
    应将与上次
    clockRunning
    调用的时间差添加到
    timeappeased
  • stop
    应停止
    clockRunning
    函数调用,并将
    clockRunning
    调用时间设置为类似
    null
    -1
    的值
  • start
    中,如果上次调用
    clockRunning
    的时间是
    null
    -1
    (基本上,如果调用了stop),则将上次调用
    clockRunning
    的时间设置为现在
    “但它似乎仍在后台运行”——你怎么会这么想?@DavidWaters Dvorak FTW。但我想从它离开的时候继续。当我放置
    timebegind=newdate()时
    start
    中,它从时间零点开始重新启动,我的意思是它不会从我单击
    stop
    按钮时停止的地方恢复。@Zip请看我答案的最后一段。当你停止计时器时,你需要将当前持续时间存储在某个地方,以便在单击“下一步开始”时将其添加回。最后一段对我来说有点棘手。想帮忙吗?我已经试了两个小时了:(你为什么要删除你最后的评论?我再也看不到了。