2013-12-16 62 views
0

我需要在瀏覽器(手機和桌面)上重現類似動畫的效果,這種效果只是背景顏色從黑色到白色的程序變化。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訪問。或者我可以創建一個本地應用程序,肯定會比瀏覽器更精確,但是再次,我想知道我是否可以使其在瀏覽器上工作。

+0

我認爲NaCl應用程序是最好的解決方案,因爲您真的不想依賴同步單線程應用程序中的計時器(至少在我的經驗中)。 Flash可能會訣竅,但正如你所說,IOS可能是一個問題。也許帆布? http://stackoverflow.com/questions/16253920/canvas-game-timer –

+1

*「...假設最大刷新頻率爲50Hz ...」*這似乎是一個無效的假設,我用過的大多數顯示器都是至少* 60Hz,即使在英國,這裏的主電源是50. –

+1

還有其他的方法來計時JS中的事件,上面的鏈接或[this](http://stackoverflow.com/questions/13939719/best-方法 - 創建時間敏感 - 瀏覽器 - 應用程序 - 桌面 - 高 - ti)可能是使用setTimeout的可能替代方案 – DBS

回答

1

我建議你嘗試的唯一的事情就是,忘記sestTimeout並嘗試Date()。getTime()它會給你一個微秒的unix時間戳,你可以嘗試查詢並實現你自己的設置超時。我不知道這是否會奏效,但你沒有失去任何努力。

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

有一些例子。