2013-01-08 76 views
0

我尝试使用下面的代码定期更改标签的文本:更改标签文本定期的Javascript

function sleep(milliSeconds) { 
     var startTime = new Date().getTime(); 
     while (new Date().getTime() < startTime + milliSeconds); 
    } 
    function showMap() { 
     var str = document.getElementById("lbPoints").firstChild.nodeValue; 
     var lbl = document.getElementById("my"); 
     var strs = str.split("-"); 
     var millisecondsToWait = 500; 

     for (var i = 0; i < strs.length-1; i++) { 
      lbl.innerHTML = strs[i]; 
      sleep(500); 
     }  
    } 

我的“海峡”和“可疑交易”是正确的。代码有效,但是会等待5秒钟,然后在strs中输出最后一个字符串以屏幕显示,而不是别的。我能做些什么来定期改变它?

+2

我希望你认识到你锁定*整个线程*半秒钟!请不要这样做。改为使用['setInterval'](https://developer.mozilla.org/en-US/docs/DOM/window.setInterval)。 –

+0

我在这里得到答案之前曾尝试过间隔并且无法成功,而我在互联网上发现了这个问题。这是一个小项目,我并不在乎。不过,谢谢指出。 –

回答

3

这不是你睡觉的方式。在任何语言中,重复测试 直到一个日期才是正确的。

而是执行此操作:

function showMap() { 
    var str = document.getElementById("lbPoints").firstChild.nodeValue; 
    var lbl = document.getElementById("my"); 
    var strs = str.split("-"); 
    var millisecondsToWait = 500; 
    var i=0; 
    var interval = setInterval(function(){ 
     if (i==strs.length-2) clearInterval(interval); 
     lbl.innerHTML = strs[i++]; 
    }, millisecondsToWait); 
} 

Demonstration

这使用setInterval重复调用的函数,clearInterval在数组末尾停止被调用的函数。

+0

为什么立即投票?这甚至不起作用。 –

+0

并没有解释任何东西。 – Madbreaks

+0

@IsmetAlkan查看编辑答案。修复('var i = 0')和一个链接。 –

2

只需使用setInterval,就是这么做的。从documentation

,调用一个函数或反复执行一个代码段,用每次调用该函数之间的固定 时间延迟。

+1

这里有点困惑。你能告诉我如何? –

+1

+1,但一个例子不会受伤。 –

+0

通过指向文档的链接更新了我的答案,这些链接都有很好的例子。 – Madbreaks