2013-05-14 85 views
1

我有一個運行模擬,其中我想渲染的結果「活」一個小腳本:如何暫停JavaScript來允許渲染

for (i < simulation steps) { 
    do_simulation(); 
    render_with_flot(); 
} 

我注意到,該地塊只盯着最後的渲染步。

  • 有沒有辦法'暫停'JavaScript以某種方式允許渲染在每次迭代後運行?
  • 或者有沒有辦法讓flot同步運行?
  • 或者我是否需要爲for循環的每次迭代設置自己的超時?這似乎是一種麻煩。

回答

2

作爲@ PhonicUK解決方案的替代方案,您可以在工作結束時()安排一次setTimeout()來安排下一次調用工作(),從而使渲染有機會發生,不會讓您自己遇到任何特定的刷新率。

+2

你的意思是'setTimeout'? – noio 2013-05-14 13:59:14

4

取決於它需要多快的速度運行,但最好的方法是使用SetInterval

僞/手寫的JavaScript,也就是說,大概-犯規運行:

var PerformedSteps; 
var Interval; 

PerformedSteps = 0; 
Interval = setInterval(work, 1000/60); //60 times/second 

function work() 
{ 
    PerformedSteps++; 

    if (PerformedSteps == simulation_steps) 
    { 
     clearInterval(Interval); 
     return; 
    } 

    do_simulation(); 
    render_with_flot(); 
} 
+0

當任務持續超過1000/60 ms時,這是否不會產生不同循環迭代重疊的風險? – noio 2013-05-15 09:54:46