一个页面上有多个倒计时(js / jQuery)
Multiple countdowns on one page (js / 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.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()
立即被无限调用。
请注意,该函数在 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);
}
相关文章:
- 在Jquery倒计时计时器上设置每个数字的动画
- 我需要JS/jQuery中的倒计时计时器
- jQuery不同浏览器上的日期倒计时
- jQuery每6小时倒计时一次
- JQuery/Javascript-当倒计时为零时重定向到上一页
- jquery从4秒倒计时到0,然后在0进入下一个函数
- 在运行jquery之前从5开始倒计时
- SetInterval 60秒倒计时问题jQuery
- jQuery倒计时-应用于通过AJAX/PHP加载的新元素
- jQuery在几个字段中倒计时
- jQuery倒计时隐藏天/小时/分钟(如果没有)
- jQuery倒计时计时器部分隐藏
- jquery倒计时问题
- jquery倒计时定时器-按键重置
- jQuery与日期相关的价格倒计时
- 有人能用jQuery倒计时格式帮我吗
- 设置和重置每个页面的倒计时 Jquery.
- 倒计时jquery当前数据
- 如何显示2位数的剩余时间[倒计时jquery]
- 从javascript倒计时(jQuery插件)解析日期