首页 新闻 会员 周边

js中使用setInterval浏览器卡死

0
悬赏园豆:5 [已解决问题] 解决于 2015-07-06 15:07

在js中做一个时间效果,使用setInterval方法每秒调用一次显示时间的Function达到动态的效果,但是运行一会浏览器卡死,求解决方法!

function timer()
{
    var nowDate = new Date();
    //获取年
    var year = nowDate.getFullYear();
    //
    var month = nowDate.getMonth() + 1;
    if (month < 10) {month = "0" + month;};
    //
    var dd = nowDate.getDate();
    if (dd < 10) {dd = "0" + dd;};
    //
    var hh = nowDate.getHours();
    if (hh < 10) {hh = "0" + hh;};
    //
    var mm = nowDate.getMinutes();
    if (mm < 10) {m = "0" + mm;};
    //
    var ss = nowDate.getSeconds();
    if (ss < 10) {ss = "0" + ss;};
    //上午/下午
    var statu = hh > 12?"PM":"AM";

    document.getElementById("nowid").innerHTML = year + "年" + month + "月" + dd + "日&nbsp;&nbsp;&nbsp;" +  hh + ":" + mm + ":" + ss + " " + statu;
    setInterval("timer()",1000);
}
jwchen的主页 jwchen | 初学一级 | 园豆:27
提问于:2015-07-06 14:37
< >
分享
最佳答案
0

楼上说的是用timeout递归调用。

大多数情况都不用interval的。

收获园豆:5
liqipeng | 小虾三级 |园豆:1160 | 2015-07-06 14:54

看出问题了,你把setInterval放在timer函数里了,递归了,运行一会儿就会产生很多个interval,这个造成的卡死。把setInterval移到外面就好了。

liqipeng | 园豆:1160 (小虾三级) | 2015-07-06 14:58

@liqipeng: 这里用interval也是ok的

liqipeng | 园豆:1160 (小虾三级) | 2015-07-06 15:00

由于递归还没有学~.~,一会去看下,我刚刚测试下把setInterval("timer()",1000);这句拿到方法外面去就没有出现卡死现象了!

jwchen | 园豆:27 (初学一级) | 2015-07-06 15:06

@MaskO1: 递归就是函数自己调用自己,自己又调用了自己,……,直到有条件让这个过程终止。有点像循环。

liqipeng | 园豆:1160 (小虾三级) | 2015-07-06 15:21

@liqipeng: 嗯  明白了,刚刚查资料学习了下,谢谢!

jwchen | 园豆:27 (初学一级) | 2015-07-06 15:25
其他回答(2)
0

以前碰过类似的情况是因为函数执行所花费的时间 大于等于这间隔的时间,所以导致了浏览器很容易被卡死

visonme | 园豆:1674 (小虾三级) | 2015-07-06 14:44

有什么解决办法没?

支持(0) 反对(0) jwchen | 园豆:27 (初学一级) | 2015-07-06 14:46
0

http://www.w3school.com.cn/jsref/met_win_setinterval.asp是你用的方法不对.你要用timeout.

有事先百度..

吴瑞祥 | 园豆:29449 (高人七级) | 2015-07-06 14:48

timeout的话只能调用一次,我要秒数一直在走,所以选择使用setInterval

支持(0) 反对(0) jwchen | 园豆:27 (初学一级) | 2015-07-06 14:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册