【问题标题】:setInterval doesn't seem to work in loops wellsetInterval 似乎不能很好地在循环中工作
【发布时间】:2014-02-13 21:20:59
【问题描述】:

我遇到了循环间隔的问题。 这是我的代码:

for(i=0;i<=10;i++){
        (function(i){
            set = setInterval(function(){
                alert("hello, world.") // for example.
            },1000);
        })(i);
    };

我希望这会在任何 1000 毫秒内发生,但是当它启动时,它会等待 1000 毫秒,然后像往常一样执行循环; 我可以这样处理:

var i = 0;
    set = setInterval(function(){
        alert("hello, world.");
        i++;
        if(i == 10){
            clearInterval(set);
        };
    },1000);

但我真的不想以这种方式规划我的代码。 我必须使用循环。 提前致谢。


为什么这不起作用:

<div id="lbl"></div><br>
    <script>
    function fun(){
        var text = "in the name of god";
        var lbl = document.getElementById("lbl");
        var arr = new Array("a","b","c","d","e","f","g","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"," ",0,1,2,3,4,5,6,7,8,9);
        for(x in text){
            var spn = document.createElement("span");
            lbl.appendChild(spn);

            for(i=0;i<=arr.indexOf(text[x]);i++){
                (function(i){
                    setTimeout(function(){
                        spn.innerHTML = arr[i];
                    },i*200);
                })(i);
            };              
        };
    };
    fun();
    </script>

【问题讨论】:

  • 你到底想做什么?
  • Scripter - 我很难理解为什么你想以这种方式在循环中使用 setInteval。您能否就您要完成的工作提供更多解释?
  • 你需要 setTimeout(fn, i*1000),而不是 setInterval... 如果你不关闭“i”,你就不需要范围安全套
  • 你期望这会做什么?您正在启动 10 个计时器,它们都将在大约同一时间(1000 毫秒)触发。然后它们都将等待 1000 毫秒并再次触发。
  • 我看不出需要计时器来实现类似的功能。您为什么不发布您拥有的实际代码?

标签: javascript html loops


【解决方案1】:

你需要颠倒这个——让定时器驱动循环,而不是循环驱动定时器。 根据您的示例:

<label id="lbl"></label><br>
<script>

function ok(a){
    var arr = new Array("a","b","c","d","e","f","g","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",0,1,2,3,4,5,6,7,8,9);
    var lbl = document.getElementById("lbl");
    var i = 0, iMax = arr.indexOf(a);

    function next()
    {   
        lbl.innerHTML = arr[i];
        if (++i <= iMax) {
            setTimeout(next,i * 200);
        }                
    }
    setTimeout(next,0);
}
ok("z");
</script>

【讨论】:

  • 谢谢,好主意,你知道我需要我的代码来获取一个字符串和一个元素,然后从字符串中的第一个单词开始并为其执行此操作,当等于给定单词时,停止并然后转到另一个单词,直到字符串中的所有单词都放入元素中,明白了吗?原谅我的英语不好
  • 是的,我明白了——但我已经让你完成了。我的工作不是做你的工作。 ;)
  • 我不想让你做我的工作,我告诉过你我的计划
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多