所以我为一个时钟制作了一个小脚本,并使用setInterval使其生效。 它工作正常,但问题是它在一分钟左右后冻结我的浏览器。我有点卡住,因为我不知道如何解决这个问题。有人可以帮忙吗? 这是代码:
$(function liveClock(){
var dt = new Date();
var hh = dt.getHours();
var mm = dt.getMinutes();
var ss = dt.getSeconds();
var ampm = "";
if (ss <= 9){ ss = "0"+dt.getSeconds() }
if (mm <= 9){ mm = "0"+dt.getMinutes() }
if (hh > 12){
hh = hh - 12;
ampm = "pm";
}else{
ampm = "am";
}
$("p").html( hh + ":" + mm + ":" + ss + " " + ampm );
setInterval(function(){
liveClock();
}, 1000);
});
提前致谢
答案 0 :(得分:5)
每次liveClock
运行时,都会启动间隔运行。
您手动运行它。您有一个间隔运行,每秒运行一次。
1秒后,它再次被调用。你现在有两个时间间隔每秒调用它。
2秒后,它再次被调用两次。你现在每隔4个时间间隔调用一次。
3秒。 8个间隔。
4秒。 16个区间。
等
$()
替换为setInterval
setInterval
答案 1 :(得分:0)
我认为这是因为每次运行该功能时都会设置setInterval
,所以一分钟后你就会有60个计时器。
您只需设置setInterval
一次即可使其正常工作:
function liveClock(){
var dt = new Date();
var hh = dt.getHours();
var mm = dt.getMinutes();
var ss = dt.getSeconds();
var ampm = "";
if (ss <= 9){ ss = "0"+dt.getSeconds() }
if (mm <= 9){ mm = "0"+dt.getMinutes() }
if (hh > 12){
hh = hh - 12;
ampm = "pm";
}else{
ampm = "am";
}
$("p").html( hh + ":" + mm + ":" + ss + " " + ampm );
}
$(function() {
setInterval(function(){
liveClock();
}, 1000);
});
JSFiddle:http://jsfiddle.net/76328/
或尝试将其换成setTimeout()
,而只会发生一次。
答案 2 :(得分:-2)
试试这个:
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="Scripts/jquery-1.4.1.min.js"></script>
<script>
function liveClock() {
var today = new Date();
var h = today.getHours();
var m = today.getMinutes();
var s = today.getSeconds();
m = checkTime(m);
s = checkTime(s);
$("p").html(h + ":" + m + ":" + s);
var t = setTimeout(function () { liveClock() }, 500);
}
function checkTime(i) {
if (i < 10) { i = "0" + i }; // add zero in front of numbers < 10
return i;
}
</script>
</head>
<p></p>
此代码不会冻结浏览器,我已经检查过它并且完美无缺。希望能够对代码进行投票。