firefox 6下 setInterval的一个问题

imbigsnake1 2011-09-20 09:24:53
我用setInterval函数来做一个倒计时的功能,可是当在ff中切换到其他标签页的时候,这个倒计时器会暂停。在ie下正常,有谁遇过这个问题吗。
...全文
1125 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
哦哦不好意思,是我自己看得不细
imbigsnake1 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wldlzt 的回复:]

引用 14 楼 imbigsnake1 的回复:
HTML code


<html>
<body>

<input type="text" id="clock" size="35" />
<script language=javascript>
var int=self.setInterval("clock()",50)
function clock()
{
var t……
[/Quote]
上面那个代码调用的是当前时间,肉眼看不出来,切换过去事件就马上被替换为当前时间了。我ie下测试没你说的这种情况发生
shenjungd 2011-09-20
  • 打赏
  • 举报
回复
ExtJs 交流群174120306
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 imbigsnake1 的回复:]
HTML code


<html>
<body>

<input type="text" id="clock" size="35" />
<script language=javascript>
var int=self.setInterval("clock()",50)
function clock()
{
var t=new Date()
document……
[/Quote]

IE里,好像我调的间隔时间在10-1000内,都会按1秒去累积,不知你测试是否是这样
imbigsnake1 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wldlzt 的回复:]

更直接点说,这个是无需“切换回来会触发的事件”中去解决,而是一直有时间的纠错机制在处理
[/Quote]
嗯~明白
imbigsnake1 2011-09-20
  • 打赏
  • 举报
回复

<html>
<body>

<input type="text" id="clock" size="35" />
<script language=javascript>
var int=self.setInterval("clock()",50)
function clock()
{
var t=new Date()
document.getElementById("clock").value=t
}
</script>
</form>
<button onclick="int=window.clearInterval(int)">
Stop interval</button>

</body>
</html>

这个却是正常的,每50毫秒就调用一次。
  • 打赏
  • 举报
回复
更直接点说,这个是无需“切换回来会触发的事件”中去解决,而是一直有时间的纠错机制在处理
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 imbigsnake1 的回复:]
引用 10 楼 wldlzt 的回复:

引用 6 楼 imbigsnake1 的回复:
引用 5 楼 wldlzt 的回复:

这个好像是正常的,听说是多标签浏览器的一个机制,即标签切换时,不在当前的标签页会暂停执行,但不同的浏览有不同的处理方式,你可以再搜索一下

嗯,可是淘宝聚划算的倒计时在ff下是正常的,应该有解决的办法。

哈,这个可能是你理解上的问题,并不是说它能倒计……
[/Quote]

这个还是有一些方法去实现的,如:setInterval倒计时的方法里,保存着当前倒计时的一个时间,然后呢,这个时间会与当前系统或是服务时的时间进行比较,这个肯定会有偏差,所以就需要纠正,这是与你是否切换无关的,这是一直是在纠正时间的一个机制,不管你切换了多久,或是你没切换,这个纠正都一直在进行中,只要有偏差就会纠正,不知您是否理解。但淘宝是不是这样,我不敢下准确的判断。
imbigsnake1 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wldlzt 的回复:]

引用 6 楼 imbigsnake1 的回复:
引用 5 楼 wldlzt 的回复:

这个好像是正常的,听说是多标签浏览器的一个机制,即标签切换时,不在当前的标签页会暂停执行,但不同的浏览有不同的处理方式,你可以再搜索一下

嗯,可是淘宝聚划算的倒计时在ff下是正常的,应该有解决的办法。

哈,这个可能是你理解上的问题,并不是说它能倒计时,就是setInterval一直在正常起着……
[/Quote]
嗯,那切换回来会触发的事件是哪个?另外我试了一下淘宝聚划算,切换回去的时候并没有检测到浏览器有新的请求。不过它有一直在轮询一个url。
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 imbigsnake1 的回复:]
引用 5 楼 wldlzt 的回复:

这个好像是正常的,听说是多标签浏览器的一个机制,即标签切换时,不在当前的标签页会暂停执行,但不同的浏览有不同的处理方式,你可以再搜索一下

嗯,可是淘宝聚划算的倒计时在ff下是正常的,应该有解决的办法。
[/Quote]
哈,这个可能是你理解上的问题,并不是说它能倒计时,就是setInterval一直在正常起着作用,它很可能是另一个机制,如:确实是在用setInterval做倒计机,但是,你切换后,也确实停止了,只是在你切换回来时,它会先从服务端取一个最新的时间回来继续倒计时,这你明白了没?
abcd_ufo 2011-09-20
  • 打赏
  • 举报
回复


这个 我刚弄了下 没弄出来
imbigsnake1 2011-09-20
  • 打赏
  • 举报
回复
如果可以绕过这个问题也可以,只要可以实现我的目的
setInterval("test()",1000); 那如果是设置为1000如何做出精确到0.01秒的倒计时器呢
abcd_ufo 2011-09-20
  • 打赏
  • 举报
回复

恩 真实这个问题

我刚才试了下 setTimeout 一样的问题.. 网上 好像也没有这样的 资料

这个 看有 高手 帮你 解决下
imbigsnake1 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wldlzt 的回复:]

这个好像是正常的,听说是多标签浏览器的一个机制,即标签切换时,不在当前的标签页会暂停执行,但不同的浏览有不同的处理方式,你可以再搜索一下
[/Quote]
嗯,可是淘宝聚划算的倒计时在ff下是正常的,应该有解决的办法。
  • 打赏
  • 举报
回复
这个好像是正常的,听说是多标签浏览器的一个机制,即标签切换时,不在当前的标签页会暂停执行,但不同的浏览有不同的处理方式,你可以再搜索一下
imbigsnake1 2011-09-20
  • 打赏
  • 举报
回复
或改为100看看
imbigsnake1 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qianzai5765638 的回复:]

HTML code

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>demo</TITLE>
<META http-equiv="content-type" content="text/html;charset=gbk"/>
<META NAME="Gener……
[/Quote]
你把1000改为10看看。我本来是设置为10的,改为1000后正常
abcd_ufo 2011-09-20
  • 打赏
  • 举报
回复

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>demo</TITLE>
<META http-equiv="content-type" content="text/html;charset=gbk"/>
<META NAME="Generator" CONTENT="CSS">
<META NAME="Author" CONTENT="zhangqian">
<META NAME="Keywords" CONTENT="mydemo">
<META NAME="Description" CONTENT="this is my demo">
<LINK rel="stylesheet" type="text/css" href=""></LINK>
<style type="text/css">
body
{

}
</style>

<script type="text/javascript" src=""></script>

</HEAD>
<BODY>

<input type="text" name="t" id="t" />

<script type="text/javascript">
var i=0;
function test()
{
i++;
document.getElementById("t").value=i;
}
setInterval("test()",1000);
</script>

</BODY>
</HTML>



我的不会啊,我用ff试了 首先在这个页面执行 然后 新开一个选项卡 执行这个 页面 我回到第一个页面 他的值在就是正常情况下的..
Gemini Dean 2011-09-20
  • 打赏
  • 举报
回复
没遇到过,帮顶
imbigsnake1 2011-09-20
  • 打赏
  • 举报
回复
顶一下,看还有人来没

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧