否。网页浏览器中的JavaScript不仅是单线程的,而且它与浏览器呈现共享相同的线程。如果您的JavaScript代码被阻止,那么在此期间浏览器UI将变得无响应。
在JavaScript中处理基于时间事件的典型方法是使用asynchronous timers。 John Resig前一段时间写了一篇郁闷的文章,名字叫“How JavaScript Timers Work”,你可能想查看一下。
UPDATE:
您是否使用了Google Visualization API的轨距?如果是这样,我认为Google已经处理了您正在尝试实现的流畅动画。请在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);
}
@Daniel Vassallo:setTimeOut()(唯一)的方式去(没有jQuery)? – 2010-09-18 00:54:54
是的,'setTimeout'不会阻塞UI线程。 – 2010-09-18 00:55:31
@Greg:是的,[setTimeout()](https://developer.mozilla.org/en/window.setTimeout)和[setInterval()](https://developer.mozilla.org/en/window.setInterval )不要阻止执行。他们会让你定义一个回调函数,当超时到期时会调用它。一般来说,这是JavaScript中大部分基于时间的事件的方法。 – 2010-09-18 00:58:41