2011-11-30 77 views
1

在下面的代码中,乘以0.002是否有任何特殊用途?为什么在这行代码中乘以0.002:new Date()。getTime()* 0.002;

var time = new Date().getTime() * 0.002; 

此代码摘录是从here拍摄。我提供以下的整个代码也:

window.requestAnimFrame = (function(){ 
    return window.requestAnimationFrame  || 
      window.webkitRequestAnimationFrame || 
      window.mozRequestAnimationFrame || 
      window.oRequestAnimationFrame  || 
      window.msRequestAnimationFrame  || 
      function(/* function */ callback, /* DOMElement */ element){ 
      window.setTimeout(callback, 1000/60); 
      }; 
})(); 
var canvas, context; 

init(); 
animate(); 

function init() { 

canvas = document.createElement('canvas'); 
canvas.width = 256; 
canvas.height = 256; 

context = canvas.getContext('2d'); 

document.body.appendChild(canvas); 

} 

function animate() { 
    requestAnimFrame(animate); 
    draw(); 
} 

function draw() { 
    var time = new Date().getTime() * 0.002; 
    var x = Math.sin(time) * 96 + 128; 
    var y = Math.cos(time * 0.9) * 96 + 128; 

    context.fillStyle = 'rgb(245,245,245)'; 
    context.fillRect(0, 0, 255, 255); 

    context.fillStyle = 'rgb(255,0,0)'; 
    context.beginPath(); 
    context.arc(x, y, 10, 0, Math.PI * 2, true); 
    context.closePath(); 
    context.fill(); 
} 
+1

我也跟着你的链接,并看不出代码随处可见但我会继续说,是的,有一个特殊的目的(只是0.002乘以不是偶然发生的事情)。 – nnnnnn

+0

转到页面上的JSFiddle窗口,然后单击JavaScript。 –

+1

我想它会得到自1970年1月1日以来的半秒数。不能在你的链接中找到代码。 –

回答

1
var time = new Date().getTime() * 0.002; 
var x = Math.sin(time) * 96 + 128; 
var y = Math.cos(time * 0.9) * 96 + 128; 

由getTime方法返回的值是自1毫秒数1970年1月该值被用于计算下一个x和y坐标为圆。

3

该代码使用Math.sin(time) * 96 + 128作为x坐标,Math.cos(time * 0.9) * 96 + 128作为y坐标。如果time是毫秒数(如new Date().getTime()是),那么x坐标和y坐标将随着每次连续调用而大幅摇摆,并且点似乎不会“移动”,而是“随意跳跃”60秒每秒一次,比眼睛能够追踪更快。将毫秒数乘以0.002导致点的x坐标和y坐标以更平滑的方式振荡,其方式看起来像(像人眼一样)运动。

+0

对,除了像这样分开500,'new Date()。getTime()/ 500;'可以产生类似的结果。我可以假设0.002是任意的吗? –

+0

@Jesse,re:除以500:你说得对:在JavaScript中,'/ 500'等同于'* 0.002'。我对他可能选择编写'* 0.002'有一些想法,但我无法给你一个肯定的答案 - 而且它无论如何也没有什么不同。回复:任意的:我猜测他尝试了几个不同的值,直到他获得了对他来说很好的速度。 “0.002”绝对不是什么神奇的东西,而不是“0.001”或“0.004”。 – ruakh

+0

@ruakh - '在JavaScript中,/ 500相当于* 0.002' - 不仅仅在JavaScript中,在数学上一般。 :-)简而言之,它是控制动画速度的比例因子。 – RobG

0

该值控制圆圈绘制的位置,作为当前时间的一小部分。数字越小,动画出现的越慢(并且更清晰) - 对于更大的数字,反过来也是如此。

您可以通过单击jsFiddle小部件右上角的加号图标来玩数字 - 这会将您带到jsFiddle站点,您可以在其中编辑和运行javascript。

注意 - 它看起来像有问题的脚本不与​​IE 9兼容 - 在FF对我来说工作正常,但没有测试任何其他浏览器...

相关问题