use*_*923 6 javascript settimeout
我有一个简单的JavaScript计时码表显示在名为"d2"的表单字段上,它用于检查某人执行特定任务所需的时间:
var milisec=0
var seconds=0
var complemento1=""
document.form1.d2.value='00:00:00'
function display(){
if (milisec>=9){
milisec=0
seconds+=1
}
else{
milisec+=1
}
complemento1=complemento2=complemento3="";
if ((seconds%60)<10) complemento1="0";
if ((Math.floor(seconds/60)%60)<10) complemento2="0";
if ((Math.floor(seconds/3600))<10) complemento3="0";
document.form1.d2.value=complemento3+Math.floor(seconds/3600)+":"+complemento2+(Math.floor(seconds/60)%60)+":"+complemento1+(seconds%60)
setTimeout("display()",100)
}
Run Code Online (Sandbox Code Playgroud)
问题是当人打开一个新标签/使用另一个程序时,计时器停止,然后在窗口再次聚焦时恢复(使用Chrome).它具有最奇怪的行为,因为有时它会起作用,有时却不起作用.
我看到许多帖子需要一个脚本在没有聚焦时停止,我想要完全相反,搜索超过一个小时没有运气.非常感谢您的帮助!
JavaScript 超时不能保证在特定时间执行。例如,如果线程在计时器结束时正忙于其他事情,它将首先完成它正在做的事情,然后执行您的计时器。
此外,您的函数没有考虑显示函数内花费的时间,因此每毫秒都会添加一点延迟。
实现定时器的正确方法是使用系统时间。
所以像这样:
//Call at the beggining to save the start time
var start_time = new Date()
// Compute seconds (does not matter when/how often you call it.)
var milliseconds_since_start = new Date().valueOf() - start_time
Run Code Online (Sandbox Code Playgroud)
Date 对象还可以将此周期格式化为时钟:
var m = new Date(milliseconds_since_start)
m.getMinutes()+":"+m.getSeconds()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3020 次 |
| 最近记录: |