在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 + "日 " + hh + ":" + mm + ":" + ss + " " + statu; setInterval("timer()",1000); }
楼上说的是用timeout递归调用。
大多数情况都不用interval的。
看出问题了,你把setInterval放在timer函数里了,递归了,运行一会儿就会产生很多个interval,这个造成的卡死。把setInterval移到外面就好了。
@liqipeng: 这里用interval也是ok的
由于递归还没有学~.~,一会去看下,我刚刚测试下把setInterval("timer()",1000);这句拿到方法外面去就没有出现卡死现象了!
@MaskO1: 递归就是函数自己调用自己,自己又调用了自己,……,直到有条件让这个过程终止。有点像循环。
@liqipeng: 嗯 明白了,刚刚查资料学习了下,谢谢!
以前碰过类似的情况是因为函数执行所花费的时间 大于等于这间隔的时间,所以导致了浏览器很容易被卡死
有什么解决办法没?
http://www.w3school.com.cn/jsref/met_win_setinterval.asp是你用的方法不对.你要用timeout.
有事先百度..
timeout的话只能调用一次,我要秒数一直在走,所以选择使用setInterval