我需要在浏览器(手机和桌面)上重现类似动画的效果,这种效果只是背景颜色从黑色到白色的程序变化。setTimeout函数精确定时
调光很重要,因为短时间的黑色背景意味着“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();
而一个working demo(如果你受到任何癫痫综合征,不要打开)
的问题是,1出20浏览器一塌糊涂的计时,当然在传感器方面,我有一个容忍范围,一个非常宽容的范围,但浏览器有时再次出现几毫秒,这并不奇怪,如果您的手机电脑在后台执行某些操作,性能的浏览器受到严重影响。
有没有这方面的软件解决方案?我正在考虑使用闪光灯更精确地进行闪烁,但我真的很喜欢我的应用程序可以从IOS访问。或者我可以创建一个本地应用程序,肯定会比浏览器更精确,但是再次,我想知道我是否可以使其在浏览器上工作。
我认为NaCl应用程序是最好的解决方案,因为您真的不想依赖同步单线程应用程序中的计时器(至少在我的经验中)。 Flash可能会诀窍,但正如你所说,IOS可能是一个问题。也许帆布? http://stackoverflow.com/questions/16253920/canvas-game-timer –
*“...假设最大刷新频率为50Hz ...”*这似乎是一个无效的假设,我用过的大多数显示器都是至少* 60Hz,即使在英国,这里的主电源是50. –
还有其他的方法来计时JS中的事件,上面的链接或[this](http://stackoverflow.com/questions/13939719/best-方法 - 创建时间敏感 - 浏览器 - 应用程序 - 桌面 - 高 - ti)可能是使用setTimeout的可能替代方案 – DBS