Javascript JS倒数计时器故障排除
你可能会知道我是一个完全的JS新手,但我花了一天的时间来编写这段代码,以显示一个发货计时器,它是根据SO上的各种其他帖子编译而成的(谢谢!) 在我完成添加所需的所有功能之前,它似乎进展顺利,但现在它不起作用了。当您第一次运行代码段时,它工作正常,但一旦它勾选“day”值显示不正确(它应该显示“明天”,但它会切换到“今天”),并且计时器本身已停止倒计时 我不知道我的生活在哪里,我把它搞砸了,所以如果可能的话寻求一些帮助!提前谢谢 JSFiddle:Javascript JS倒数计时器故障排除,javascript,Javascript,你可能会知道我是一个完全的JS新手,但我花了一天的时间来编写这段代码,以显示一个发货计时器,它是根据SO上的各种其他帖子编译而成的(谢谢!) 在我完成添加所需的所有功能之前,它似乎进展顺利,但现在它不起作用了。当您第一次运行代码段时,它工作正常,但一旦它勾选“day”值显示不正确(它应该显示“明天”,但它会切换到“今天”),并且计时器本身已停止倒计时 我不知道我的生活在哪里,我把它搞砸了,所以如果可能的话寻求一些帮助!提前谢谢 JSFiddle: (函数(){ var start=新日期();
(函数(){
var start=新日期();
开始设定小时数(14,0,0);
var maybePluralize=函数maybePluralize(计数,名词){
变量后缀=arguments.length=1&&day=1&&day=start | | day==7){
document.getElementById('ddate').innerHTML='tomory';
}如果(天==5&&now>=start | |天==6){
document.getElementById('ddate')。innerHTML='Monday';
}
如果(天==6 | |天==5&&now>start | |天==7&&now开始){//太晚了,就明天去吧
start.setDate(start.getDate()+1);
}
var剩余=(立即开始)/1000;
var hh=数学下限(剩余/60/60%60);
var mm=数学地板(剩余/60%60);
document.getElementById('countdown').innerHTML=“在下一个”+可能是复数形式(hh,'hour')+“+可能是复数形式(mm,'min')+””;
设置超时(勾号,1000);
}
}
document.addEventListener('DOMContentLoaded',勾选);
})() 如果需要每秒调用函数,则需要使用
setInterval
setTimeout
仅在指定的秒数后运行给定函数一次
我对你的小提琴做了一个小的编辑,让它每秒钟运行一次
至于“day”值不正确,我认为您需要检查您的if
语句。我完全不理解你的商业逻辑
另请注意-周日由getDay中的“0”给出。我看到您使用的是day==7
,因此您可能需要对此进行检查并进行必要的调整。我想你需要从当天所有的if声明中减去-1
(函数(){
var start=新日期();
var now=新日期();
var day=now.getDay();
开始设定小时数(14,0,0);
函数可以是复数(计数,名词){
变量后缀=arguments.length=1&&day=1&&day=start | | day==7){
document.getElementById('ddate').innerHTML='tomory';
}如果(天==5&&now>=start | |天==6){
document.getElementById('ddate')。innerHTML='Monday';
}
如果(天==6 | |天==5&&now>start | |天==7&&now开始){//太晚了,就明天去吧
start.setDate(start.getDate()+1);
}
var剩余=(立即开始)/1000;
var ss=数学下限(剩余为%60);
剩余=数学楼层(剩余/60);
var mm=剩余的%60;
剩余=数学楼层(剩余/60);
var hh=剩余的%60;
document.getElementById('countdown').innerHTML=“在下一个”+可能是复数形式(hh,'hour')+”+可能是复数形式(mm,'min')+“+”+”+可能是复数形式(ss,'sec')+”;
}
}
document.addEventListener('DOMContentLoaded',function(){
设置间隔(刻度,1000);
});
})();代码>
发货订单
谢谢!我不知道星期天=0的事。我只需要每分钟调用一次函数,但为了调试,我降低了间隔。我一直在反复研究代码,似乎是if语句“if(now>start){start.setDate(start.getDate()+1);”在我学会JS之前,我已经删除了这个功能,现在似乎工作得很好-欢迎,也检查一下你的setInterval使用情况,你需要把它放在正确的位置哦,好的。这些都是特定于语言的东西,比如getDay。我建议你在使用新功能时检查MDN操作性/方法,并陷入困境。
(function() {
var start = new Date();
start.setHours(14, 0, 0);
var maybePluralize = function maybePluralize(count, noun) {
var suffix = arguments.length <= 2 || arguments[2] === undefined ? 's' : arguments[2];
return count + ' ' + noun + (count !== 1 ? suffix : '');
};
var now = new Date();
var day = now.getDay();
function tick() {
if (day >= 1 && day <= 5 && now < start) {
document.getElementById('ddate').innerHTML = 'today';
} else if (day >= 1 && day <= 4 && now >= start || day == 7) {
document.getElementById('ddate').innerHTML = 'tomorrow';
} else if (day == 5 && now >= start || day == 6) {
document.getElementById('ddate').innerHTML = 'Monday';
}
if (day == 6 || day == 5 && now > start || day == 7 && now < start) {
document.getElementById('countdown').innerHTML = "now";
} else {
if (now > start) { // too late, go to tomorrow
start.setDate(start.getDate() + 1);
}
var remain = (start - now) / 1000;
var hh = Math.floor(remain / 60 / 60 % 60);
var mm = Math.floor(remain / 60 % 60);
document.getElementById('countdown').innerHTML = "in the next <strong>" + maybePluralize(hh, 'hour') + " " + maybePluralize(mm, 'min') + "</strong>";
setTimeout(tick, 1000);
}
}
document.addEventListener('DOMContentLoaded', tick);