【问题标题】:Add text to div from array and remove it after X seconds将文本从数组添加到 div 并在 X 秒后将其删除
【发布时间】:2015-10-18 02:50:20
【问题描述】:

我第一次使用 JQuery 试图找出一个没有任何运气的东西。我想做的是:

  1. 从数组中获取值并将其打印到 div 中。
  2. 等待 X 秒,然后从 div 中删除文本。
  3. 移至数组中的下一个值并重复该过程,只要数组中有值。

我得到了以下代码,它显示了数组中的所有值,3 秒后它删除了我不想要的所有内容:

Div 看起来像这样:

<div id="loader"></div>

脚本如下所示:

var cars = ["Saab", "Volvo", "BMW"];

for(var i=0; i<cars.length; ++i){
    $("#loader").append(cars[i] +"<br/>");

    setTimeout(function() {
        $( "#loader" ).empty();
    }, 3000);
}

【问题讨论】:

  • 所以你想在给定时间后显示数组中的下一个值?如果你到达最后一个元素,你还想要什么?
  • 已发布 7 个答案,总共 0 个答案符合 OP 的要求。 (提示:你们都忘记了循环最后一次迭代的第 2 步)

标签: javascript jquery arrays


【解决方案1】:

设置超时

您在setTimeout 中打包的任何内容都将在给定的超时后执行。在你的例子中

setTimeout(function () {
    $("#loader").empty();
}, 3000);

setTimeout 会在 3 秒后清除所有内容。相反,您需要在 3 秒后加载每个元素。

$(document).ready()

我在您的问题中没有看到$(document).ready(),我假设您使用了它但没有提及它,或者您的脚本包含在文档的末尾。使用 jQuery 时,您需要确保页面已经渲染,然后才能在 DOM 元素上使用选择器。

代码示例

试试这个:

var cars = ["Saab", "Volvo", "BMW"];

$(document).ready(function () {
    loadItem(0);
});

function loadItem(index) {
    if (index < cars.length)
    {
        $('#loader').html(cars[index]);
        setTimeout(function () {
            loadItem(index + 1);
        }, 1000);
    }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="loader"></div>

【讨论】:

  • 谢谢@MichaelParker,我进行了更改以限制迭代:)
【解决方案2】:

您可以通过结合 jQuery 的 delay()queue() 方法来完全避免 setTimeout

var cars = ['Saab', 'Volvo', 'BMW'];

$.each(cars, function(_, val) {  //for each car ...
  $('#loader')                   
    .delay(1000)                 //wait 1 second
    .queue(function(next) {      //add to queue
      $(this).html(val);         //output car
      next();                    //continue with the next queued item
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="loader"></div>

【讨论】:

    【解决方案3】:

    简单的解决方案:

    <div id="loader"></div>
    
    <script>
        var cars = ["Saab", "Volvo", "BMW"];
    
        function showCar(){
            if(cars.length != 0){
                document.getElementById('loader').innerHTML = cars.splice(0, 1);
                setTimeout(showCar, 3000);
            }
        }
    
        showCar();
    </script>
    

    【讨论】:

      【解决方案4】:

      这里我有一个很好的选择,它使用 setInterval 而不是 setTimeoutavoid 使用 loops

      var cars = ["Saab", "Volvo", "BMW"];
      
      var i = 0;
      
      var interval = setInterval(function(){
          if(i < cars.length){
              $( "#loader" ).text(cars[i]);
              i++;
          }else{
             // stop the timer 
             interval = null;
          }
      
      },3000);
      

      【讨论】:

        【解决方案5】:

        你需要更新你的代码

         var cars = ["Saab", "Volvo", "BMW"];
        var i = 0;
        
        
           function paintCar(){
                $( "#loader" ).empty();
                if(i != cars.length) {
                      if(i < cars.length) {
                           $("#loader").append(cars[i] +"<br/>");
                      }
                      setTimeout(function() {
                        paintCar(); 
                      }, 3000);
                }
        
                i++;
           }
           paintCar();
        

        供参考 - http://plnkr.co/edit/NPqDpXHPYoBCNOgDK5d6?p=preview

        【讨论】:

        • 嘿!这正是我所需要的。唯一的问题是最后一个值“BMW”没有显示 X 秒,实际上根本没有显示。你知道为什么吗?
        • 好吧,对我来说它会永远显示出来。您想对最后一个值(即 BMW)做什么?
        猜你喜欢
        • 2020-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-19
        • 2020-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多