javascript:在for循环中使用settimeout以定期显示文本

时间:2016-04-30 05:37:05

标签: javascript

我希望定期显示3行(一秒),这里是代码:

    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    function showText()
    {
        var itemlist = document.getElementsByClassName("test");
        function additem(index) {
            setTimeout(function(){itemlist[index].setAttribute("style", "display:block;");}, 1000);
        }
        for(var i=0;i<itemlist.length;++i) {
            additem(i);
        } 
    }
    </script>
    </head>

    <body>
        <input type="button" value="show" onClick="showText()">
        <div class="test" style="display:none">first</div>
        <div class="test" style="display:none">second</div>
        <div class="test" style="display:none">third</div>
    </body>
    </html>

但结果是:当我点击显示按钮时,一秒钟后, 所有三个div块一起出现。我期待它们将以1秒的间隔逐个显示。

我该如何解决这个问题?希望得到你的帮助。

2 个答案:

答案 0 :(得分:2)

你同时打电话给所有人。仅清楚地使用line1

setTimeout(line1, 1000);
setTimeout(line2, 1000);
setTimeout(line3, 1000);

他们没有&#34;堆积&#34;。这三个函数都将在1秒内运行。

您有两种选择。选项1:

setTimeout(line1, (1 + index) * 1000);
setTimeout(line2, (1 + index) * 1000);
setTimeout(line3, (1 + index) * 1000);

这会导致它们一个接一个地超时。

另一个选项是将超时调用作为下一个调用:

var index = 0;
function showNextLine() {
    // show line index
    index++;
    if (index < 3) {
       setTimeout(showNextLine, 1000);
    }
}
setTimeout(showNextLine, 1000);

通过这种方式他们&#34;链&#34;就像你可能期待的那样。

还有其他变体,您甚至可以使用setInterval()clearInterval()

答案 1 :(得分:-1)

  • 创建全局变量
  • 使用setInterval函数
  • 每次执行setInterval时递增计数
  • 如果它到达最后一次从头开始(如果差异b / w没有.dif和计数小于1)
  • 淡出除当前的
    之外的所有div

SHA-1(SHA-1(SHA-1(attempt + salt))) === Result
$(document).ready(function() {
  var count = 0;
  setInterval(function() {
    showIframe(count);
     count++;
    if (($('.wall-display').length - count) < 1) {
                    count = 0;
                }
  }, 1000);
  function showIframe(count) {
    $('.wall-display').fadeOut('fast');
    $('#frame' + count).fadeIn('fast');
  }
  
  
});
.wall-display:not(:first-child) {
  display: none;
  position: absolute;
}