Javascript 一页多个倒计时(js/jQuery)
我试图在一个页面上放置几个(从5到25)简单的倒计时,浏览器崩溃(100%CPU负载) 请救人Javascript 一页多个倒计时(js/jQuery),javascript,jquery,Javascript,Jquery,我试图在一个页面上放置几个(从5到25)简单的倒计时,浏览器崩溃(100%CPU负载) 请救人 function timersInit(){ $('[data-countdown]').each(function() { var timerObject = $(this), time_left_nix = parseInt(timerObject.data('countdown')), time_left_h = Math.
function timersInit(){
$('[data-countdown]').each(function() {
var timerObject = $(this),
time_left_nix = parseInt(timerObject.data('countdown')),
time_left_h = Math.floor(time_left_nix / 3600),
time_left_m = Math.floor((time_left_nix / 60) - (time_left_h * 60)),
time_left_s = Math.floor(time_left_nix - (time_left_m * 60) - (time_left_h * 3600));
timerObject.text(time_left_h + ":" + (time_left_m < 10 ? "0" + time_left_m : time_left_m) + ":" + time_left_s);
});
setTimeout(timersInit(), 1000);
}
函数timersInit(){
$(“[data countdown]”)。每个(函数(){
var timerObject=$(此),
time_left_nix=parseInt(timerObject.data(‘倒计时’),
时间左=数学楼层(时间左/3600),
time\u left\u m=数学地板((time\u left\u nix/60)-(time\u left\u h*60)),
time_left_s=Math.floor(time_left_nix-(time_left_m*60)-(time_left_h*3600));
timerObject.text(time_left_h+“:”+(time_left_m<10?“0”+time_left_m:time_left_m)+“:”+time left_s);
});
setTimeout(timersInit(),1000);
}
代码的问题是函数timersInit()
被无限次地立即调用
请注意,函数在setTimeout
内立即调用,返回值用作超时后调用的函数。这会导致函数无限递归调用,直到浏览器挂起
function timersInit() {
....
setTimeout(timersInit(), 1000);
// timersInit(): means call immediately
}
要解决此问题,可以使用函数引用而不是调用它
setTimeout(timersInit, 1000); // Removed `()` of `timersInit`
为了提高性能,我建议缓存元素并仅在可见元素上循环
var countdownEl = $('[data-countdown]:visible'); // Cache
function timersInit() {
countdownEl.text(function () { // Use cached version instead of diving into DOM
var time_left_nix = parseInt($(this).data('countdown')),
time_left_h = Math.floor(time_left_nix / 3600),
time_left_m = Math.floor((time_left_nix / 60) - (time_left_h * 60)),
time_left_s = Math.floor(time_left_nix - (time_left_m * 60) - (time_left_h * 3600));
return time_left_h + ":" + (time_left_m < 10 ? "0" + time_left_m : time_left_m) + ":" + time_left_s;
});
setTimeout(timersInit, 1000);
}
var countdownEl=$(“[数据倒计时]:可见”);//隐藏物
函数timersInit(){
text(函数(){//使用缓存版本,而不是深入DOM
var time_left_nix=parseInt($(this).data('countdown'),
时间左=数学楼层(时间左/3600),
time\u left\u m=数学地板((time\u left\u nix/60)-(time\u left\u h*60)),
time_left_s=Math.floor(time_left_nix-(time_left_m*60)-(time_left_h*3600));
返回时间左上角+“:”+(左下角时间<10?“0”+左下角时间:左下角时间+“:”+左下角时间;
});
设置超时(timersInit,1000);
}
设置超时(timersInit(),1000)代码>==>设置超时(timersInit,1000)代码>,$('[data countdown]')
===>$('[data countdown]:可见')
将其放在答案上。。。。我会核对正确答案…我的代码中有如此愚蠢的错误。。。。早上6点。。。需要(睡眠)谢谢你的帮助!我的代码中有这么愚蠢的错误。。。。早上6点。。。需要(睡眠)