Javascript setTimeout函数上的精确定时

Javascript setTimeout函数上的精确定时,javascript,mobile,browser,Javascript,Mobile,Browser,我需要在浏览器(手机和桌面)上重现一种类似动画的效果,这种效果只是将背景颜色从黑色改为白色的过程 计时很重要,因为短时间的黑色背景表示“0”,长时间表示“1”(类似于二进制莫尔斯电码)。该信息由屏幕前面的光传感器解释。传感器速度非常快,如果我们使用较低的频率,屏幕不会出现问题(假设最大刷新率为50Hz) 这是im使用的脚本: var i = 0; var b0t = 100; var b1t = 3.5 * b0t; var wl = 100; function pulses (){

我需要在浏览器(手机和桌面)上重现一种类似动画的效果,这种效果只是将背景颜色从黑色改为白色的过程

计时很重要,因为短时间的黑色背景表示“0”,长时间表示“1”(类似于二进制莫尔斯电码)。该信息由屏幕前面的光传感器解释。传感器速度非常快,如果我们使用较低的频率,屏幕不会出现问题(假设最大刷新率为50Hz)

这是im使用的脚本:

var i = 0;
var b0t = 100;
var b1t = 3.5 * b0t;
var wl = 100;

function pulses (){
    bytes = "1001101010110101001000100";

        bit = bytes[i];

        i += 1;

        document.body.style.backgroundColor = 'white';
        document.body.style.color = 'white';

        setTimeout(toblack, wl);

        if(i <= bytes.length) {
            if (bit == 1)
                setTimeout(pulses, b1t + wl);
            else
                setTimeout(pulses, b0t + wl);
        }
}

function toblack() {
    document.body.style.backgroundColor = 'black';
    document.body.style.color = 'black';
}

pulses ();
var i=0;
var b0t=100;
变量b1t=3.5*b0t;
var-wl=100;
功能脉冲(){
bytes=“10011010101101000100”;
位=字节[i];
i+=1;
document.body.style.backgroundColor='白色';
document.body.style.color='white';
设置超时(toblack,wl);

如果(i我唯一能建议您尝试的是,忘记sestTimeout并尝试Date()。getTime()它将给您一个微秒级的unix时间戳,您可以尝试查询该时间戳并实现您自己的设置超时…我不知道这是否可行,但您在尝试时没有任何损失

看看这里


这里有一些例子。

我认为NaCl应用程序是最好的解决方案,因为你真的不想在同步单线程应用程序中依赖计时器(至少在我的经验中是这样)。Flash可能会起到作用,但正如你所说,IOS可能是一个问题。可能是canvas?…假设最大刷新率为50Hz…”这似乎是一个无效的假设,我使用过的大多数监视器至少都是60Hz,即使在英国,那里的电源是50。在JS中,有其他方法来计时事件,上面的链接,或者可能是使用setTimeout的一种可能的替代方法