Javascript 递归计时器未正确暂停

Javascript 递归计时器未正确暂停,javascript,Javascript,我有一个计时器,用来循环遍历通过变量提供给它的JSON数据。此时,当我单击“暂停”按钮时,倒计时将正确暂停,但只要我再次单击该按钮,计时器将从第一组数据开始,而不是从暂停的位置开始。如何避免这种情况发生,并使暂停功能正常工作 var label=document.getElementById(“exerciseLabel”); var按钮=document.getElementById(“pauseButton”); var counter=document.getElementById(“e

我有一个计时器,用来循环遍历通过变量提供给它的JSON数据。此时,当我单击“暂停”按钮时,倒计时将正确暂停,但只要我再次单击该按钮,计时器将从第一组数据开始,而不是从暂停的位置开始。如何避免这种情况发生,并使暂停功能正常工作

var label=document.getElementById(“exerciseLabel”);
var按钮=document.getElementById(“pauseButton”);
var counter=document.getElementById(“executeCounter”);
var例程=document.getElementById(“信息”);
无功电流=0;
var=false;
var倒数计时器=null;
var训练=
{
“标题”:“全身”,
“练习”:
[
{
“姓名”:“俯卧撑”,
“期限”:3,
“中断”:3
},
{
“名称”:“蹲下”,
“期限”:3,
“中断”:3
},
{
“名称”:“就地运行”,
“期限”:3,
“中断”:3
}
]
};
//循环定时器功能
//初始化虚拟培训师。
init();
/**
*绑定循环开始点击按钮。
*
*@return{void}
*/
函数init()
{
loop();
按钮。addEventListener(“单击”,切换);
}
/**
*玩/停止运动。
*
*@return{void}
*/
函数切换()
{
如果(玩)
{
暂停();
}
其他的
{
loop();
}
}
/**
*重置计时器
var pause=false;
var displayBreak=false;
window.onload=函数(){
initCounter();
};
var计数;
var计数器;
无功电流=0
var元素=document.getElementById(“exerciseLabel”);
var训练=
{
“标题”:“全身”,
“练习”:
[
{
“姓名”:“俯卧撑”,
“期限”:1,
“中断”:2
},
{
“名称”:“蹲下”,
“期限”:2,
“中断”:0.5
},
{
“名称”:“就地运行”,
“持续时间”:0.25,
“中断”:1
}
]
};
函数initCounter(){
计数=锻炼。锻炼[0]。持续时间*60;
breakCount=锻炼。练习[0]。休息*60;
启动计时器();
}
函数计时器(){
如果(显示中断){
breakCount=breakCount-1;
}
否则{
计数=计数-1;
}
变量秒=(显示中断?中断计数:计数)%60;
var分钟数=数学楼层((显示中断?中断计数:计数)/60);
var小时=数学楼层(分钟/60);
分钟%=60;
document.getElementById(“计时器”).innerHTML=“+hours+”:“+minutes+”:“+seconds
显示();
如果(秒===0和分钟===0和小时===0)
{
//在运动或休息时间之后
if(!(当前===workout.exercises.length-1&&displayBreak===true)){
//显示下一个练习或休息
displayBreak=!displayBreak;
显示();
如果(!displayBreak){
电流=电流+1;
//设置中断持续时间
breakCount=(训练.练习[当前].休息)*60;
}
否则{
//设定下一个练习时间
if(当前

暂停

您没有保存任何当前的播放练习信息,暂停时需要存储该信息,恢复/播放时需要查询该信息。您可以使用
窗口。localstorage
存储循环停止的位置;这可能是您需要的,我认为您可能过度复杂化了此功能。为什么计时器需要递归?下面是我的方法。我希望这会有所帮助,尽管这是一种不同的方法。(在阅读您的回复之前,我确实做了一些假设)。我不确定既然你已经接受了一个答案,你是否还在保留你的选择。您应该能够在浏览器中使用页面保存选项(例如“文件>将页面另存为…”),但是,如果该选项不可用(如果不可用,我会感到惊讶),那么您应该能够从浏览器中选择“查看源代码”,并选择整个页面并将其粘贴到文本或代码编辑器中以保存为文件。这很好,也很有效,但是计数器似乎跳过了中断值?@Brian,我更新代码时考虑了中断。你甚至可以为休息和锻炼设定不同的时间,这很漂亮。我只是被这些东西弄糊涂了。。。如果使用的数据是JSON,为什么每次练习的计时器从5秒开始倒计时,如果每次练习的JSON值为3,则计时器会中断?首先,让我强调一下,您提供的正是我所希望的,所以这个问题只是为了让我更好地理解。我不明白的是,当我运行你的代码snipet时,计时器显示秒和小数。当显示练习(如俯卧撑)时,倒计时从5秒开始,这不是JSON中指定的值。但当显示中断时,它从3秒开始倒计时,这是JSON中中断的正确值。我只是不清楚为什么会这样。我更新了我的答案。现在,倒计时在JSON for ex的持续时间内迭代