Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
浏览器之间的Javascript微秒计时器差异?_Javascript - Fatal编程技术网

浏览器之间的Javascript微秒计时器差异?

浏览器之间的Javascript微秒计时器差异?,javascript,Javascript,在这个JSFIDLE中,我有一些动画: /*方形/三角形动画*/ 三角等待; 后三角=高度-100; 三角形dir=1; setInterval(函数(){ 如果(三角形dir==1&&posTriangle>=0)——posTriangle; 如果(triangleDir==0&&posTriangle=height-100)triangleDir=1; }否则{ 如果(cubeDir==0)三角形dir=1; } 如果(posTriangle您的1ms计时器没有指定为精确的1ms。浏览器可

在这个JSFIDLE中,我有一些动画:

/*方形/三角形动画*/
三角等待;
后三角=高度-100;
三角形dir=1;
setInterval(函数(){
如果(三角形dir==1&&posTriangle>=0)——posTriangle;
如果(triangleDir==0&&posTriangle=height-100)triangleDir=1;
}否则{
如果(cubeDir==0)三角形dir=1;
}

如果(posTriangle您的1ms计时器没有指定为精确的1ms。浏览器可以随意设置。可以长也可以短。您应该测量并更正回调之间的增量T。因此,您可以根据过去的时间向前运行动画。

V8上的性能改进。@DOCASAREL哇,有这么大的差异吗erence,嗯。你是说毫秒吗?有几句话要说。(1)超时以毫秒为单位,而不是微秒。(2)“注意:此API不保证计时器将完全按计划启动。”(3)“或者,等待用户代理定义的更长时间。”(4)“如果超时小于10,则将超时增加到10。”@RaymondChen您引用的版本日期为2011年5月25日。最好参考“编辑草稿”,它几乎每天都在更改(当前版本的日期为今天),请参见与2011年草案相比发生了实质性变化的部分。
1
参数到
setInterval
也不意味着
1ms
。它意味着未来不少于1ms的某个时间点,当浏览器处理完当时可能处理的任何其他事情时,包括渲染、垃圾收集、事件处理等你可以说出它的名字。@torazaburo实际上,根据规范,“1”意味着“未来不少于10毫秒的某个时刻”。@RaymondChen-HTML5记录了浏览器应该做什么,但没有告诉你应该做什么。setTimeout不是“标准化”的直到HTML5,所以你看到的可能是各种浏览器直到最近所做的折衷的结果(注意,大型浏览器供应商对规范有很大的影响)。虽然HTML5是一个规范,但它不是(也可能永远不会)一个标准。
/*Square / Triangle Animations*/
var triangleWaiting;
posTriangle = height - 100;
triangleDir = 1;
setInterval(function(){
    if(triangleDir == 1 && posTriangle >= 0) --posTriangle;
    if(triangleDir == 0 && posTriangle <= height - 100) ++posTriangle;
    if(!triangleWaiting){
        if(posTriangle >= height - 100) triangleDir = 1;
    } else {
        if(cubeDir == 0) triangleDir = 1;
    }
    if(posTriangle <= 0) triangleDir = 0;
    triangle.style['margin-top'] = posTriangle+'px';
}, 1);

cubeDir = 0;
posCube = 0;
setInterval(function(){
    if(cubeDir == 1 && posCube <= height - 200) --posCube;
    if(cubeDir == 0 && posCube >= 0) ++posCube;
    if(posCube <= 0) cubeDir = 0;
    if(posCube >= height - 200)  cubeDir = 1;
    cube.style['margin-top'] = posCube+'px';
}, 6);

/*Correct for error*/
setInterval(function(){
    if(triangleDir == cubeDir){
        triangleWaiting = true;
    } 
}, 1);