首页 > 解决方案 > 带有嵌套 timeOut 的 timeInterval

问题描述

页面加载后我需要:

在我的尝试中 - 我只有第二个文本,没有第一个

有什么帮助吗?

var i;
var txt = '';
var arra = ["LOREM IPSUM", "DOLOR SIT"];
var aniwrap = $('#aniwrap');

function write() {
  if (i < txt.length) {
    document.getElementById("aniwrap").innerHTML += txt.charAt(i);
    i++;
    setTimeout(write, 70);
  }
}

function single(){
    $(arra).each(function(el, val){
        setTimeout(function(){
            aniwrap.text('');
            i = 0;
            console.log(val);
            txt = val;
            write();
        }, 7000);
    });
}

$(window).on('load', function(){
    setInterval(single, 7000);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id='aniwrap'></div>

标签: javascriptjquery

解决方案


您有几个问题:$(element/selector).each(cb)对于 jQuery 对象,您想要对数组进行迭代的是$.each(array, cb)(或只是array.forEach. 另一个问题是您setTimeout同时在循环中创建 s )。除非我遗漏了一些你根本不需要循环或 setTimeout 的东西single

var idx = 0;
function single() {
  if (idx == arra.length) {
    idx = 0;
  }
  var val = arra[idx];
  aniwrap.text('');
  idx++;
  i = 0;
  txt = val;
  write();
}

推荐阅读