setTimeout功能的精确计时

时间:2013-12-16 14:28:08

标签: javascript mobile browser

我需要在浏览器(手机和桌面)上重现类似动画的效果,这种效果只是对背景颜色从黑色到白色的程序性变化。

调整很重要,因为短时间的黑色背景意味着“0”而更长的时间意味着“1”(就像二进制摩尔斯电码)。该信息由屏幕前方的光传感器解释。传感器非常快,如果我们使用较低的频率,我们不会遇到屏幕问题(假设最大刷新率为50Hz)。

这是我正在使用的脚本:

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 ();

working demo (如果您患有任何癫痫综合症,请不要打开)

问题是,20个浏览器中有1个混乱了时间,当然在传感器方面我有一个容差范围,一个非常宽容的范围,但是浏览器有时会出现几毫秒,这就是没有令人惊讶的是,如果你的手机电脑在后台做某事,浏览器的性能会受到严重影响。

有没有针对此的软件解决方案?我正在考虑使用flash来更精确地进行闪烁,但我真的很喜欢我的应用程序也可以从IOS访问。或者我可以创建一个本机应用程序,肯定会比浏览器更精确,但话又说回来,我想知道我是否可以在浏览器上运行。

1 个答案:

答案 0 :(得分:1)

我唯一可以建议你尝试的是,忘记sestTimeout并尝试Date()。getTime()它会给你一个微秒的unix时间戳,你可以尝试查询并实现你自己的设置超时...我不知道这是否有效,但你没有尝试任何尝试。

看看http://www.sitepoint.com/creating-accurate-timers-in-javascript/

有一些例子。