Javascript jQuery实时时钟工作但冻结浏览器?
因此,我为一个时钟制作了一个小脚本,并使用setInterval使其生效。 它工作正常,但问题是它会在大约一分钟后冻结我的浏览器。我有点困了,因为我不知道如何解决这个问题。有人能帮忙吗? 代码如下:Javascript jQuery实时时钟工作但冻结浏览器?,javascript,jquery,html,Javascript,Jquery,Html,因此,我为一个时钟制作了一个小脚本,并使用setInterval使其生效。 它工作正常,但问题是它会在大约一分钟后冻结我的浏览器。我有点困了,因为我不知道如何解决这个问题。有人能帮忙吗? 代码如下: $(function liveClock(){ var dt = new Date(); var hh = dt.getHours(); var mm = dt.getMinutes(); var ss = dt.getSeconds(); var ampm = ""; if (ss <=
$(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);
});
$(函数liveClock(){
var dt=新日期();
var hh=dt.getHours();
var mm=dt.getMinutes();
var ss=dt.getSeconds();
var ampm=“”;
如果(ss每次liveClock
运行时,它都会启动一个间隔运行
您可以手动运行它。您有一个每秒钟运行一次的间隔
1秒后,它会再次被调用。现在,您有两个间隔,每秒钟调用一次
2秒后,它会被再次调用两次。现在,你有4次间隔,每秒调用一次
3秒,8次间隔
4秒,16次间隔
等等
- 将
$()
替换为setInterval
- 从函数内部删除
setInterval
试试这个:
<!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>
函数liveClock(){
var today=新日期();
var h=today.getHours();
var m=today.getMinutes();
var s=today.getSeconds();
m=检查时间(m);
s=检查时间(s);
html(h+“:“+m+”:“+s);;
var t=setTimeout(函数(){liveClock()},500);
}
功能检查时间(i){
如果(i<10){i=“0”+i};//在<10的数字前面加零
返回i;
}
这段代码不会冻结浏览器,我已经检查过了,它工作得很好。希望能为这段代码投票。我想这是因为每次运行函数时都要设置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);
});
函数liveClock(){
var dt=新日期();
var hh=dt.getHours();
var mm=dt.getMinutes();
var ss=dt.getSeconds();
var ampm=“”;
如果(s)为什么它被包装在<代码> $()?不应该吗?它是我每次调用LIFECKORDER()时调用PaGeStEffice(…)的唯一脚本。要么更改算法,要么考虑使用StimeTimeOut.(…)相反。我想如果你在等待文档准备好,那没关系,但是你也可以将脚本块作为最后一个标记放在正文中,并免费获得相同的效果。@johnheridan看起来不错。我可以肯定地活一个小时。jk谢谢你:D
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);
});