JavaScript中有安全延迟吗?

Gre*_*lty 5 javascript

一种不占用资源的方法,只需停止执行1秒然后执行?

我想要做的是动态地将Google规格从一个值移动到另一个值,从而创建它移动到值而不是跳转到它的效果.

即 -

for(original_value; original_value < new_value; original_value++)
{
    data.setValue(0, 1, original_value);
    delay half a second here in JavaScript?
}  
Run Code Online (Sandbox Code Playgroud)

这是一种可行的方法,还是更接近演示所做的更好的方法?:
如何:动态移动Google Gauge?

Dan*_*llo 5

不是.Web浏览器中的JavaScript不仅是单线程的,而且它与浏览器呈现共享相同的线程.如果您的JavaScript代码被阻止,那么浏览器UI将在此期间无响应.

在JavaScript中处理基于时间的事件的典型方法是使用异步计时器.John Resig刚才写了一篇有趣的文章,叫做" JavaScript定时器如何工作 ",你可能想看一下.


更新:

您是否正在使用Google Visualization API进行测量?如果是这样,在我看来谷歌已经处理了你想要实现的流畅动画.在Google Code Playground中尝试以下操作(请密切注意网络规格):

function drawVisualization() {
  // Create and populate the data table.
  var data = new google.visualization.DataTable();
  var chart;

  data.addColumn('string', 'Label');
  data.addColumn('number', 'Value');
  data.addRows(3);
  data.setValue(0, 0, 'Memory');
  data.setValue(0, 1, 80);
  data.setValue(1, 0, 'CPU');
  data.setValue(1, 1, 55);
  data.setValue(2, 0, 'Network');
  data.setValue(2, 1, 68);

  // Change the value of the Network Gauge after 3 seconds.
  setTimeout(function () { data.setValue(2, 1, 20); chart.draw(data); }, 3000);

  // Create and draw the visualization.
  chart = new google.visualization.Gauge(document.getElementById('visualization'));
  chart.draw(data);
}
Run Code Online (Sandbox Code Playgroud)

  • @Greg:是的,[setTimeout()](https://developer.mozilla.org/en/window.setTimeout)和[setInterval()](https://developer.mozilla.org/en/window.setInterval)不要阻止执行.它们将允许您定义一个回调函数,该函数将在超时到期时调用.通常,这是JavaScript中大多数基于时间的事件的方法. (2认同)