如何定义几个setIntervals并使用延迟

时间:2017-07-05 10:31:24

标签: javascript jquery

我需要随机更改文字的字符,经过一段时间的延迟修复后。

有我的代码:



<h1 id="text" style="margin-top:100px;">SOME TEXT</h1>

<script>
    var text = document.getElementById("text").innerHTML.split("");
    var myArr = text;

    for (i = 0; i < myArr.length; ++i) {

        var handle = setInterval(function () { xyz(i) }, 100);

        setTimeout(function (handle) {
            myArr[i] = text[i];
            clearInterval(handle);
        }, (i) * 1000);
    }

    function xyz(index) {
        myArr[index] = String.fromCharCode(Math.random() * 26 + 65);
        document.getElementById("text").innerHTML = myArr;
    }
</script>
&#13;
&#13;
&#13;

似乎我对setInterval的工作原理还不太了解! :(

编辑:

使用我的代码只有text [text.length + 1]字符有变化,表示传递参数到xyx()函数是循环计数器变量的最后一个值(循环结束后)。现在我的问题是如何使用i = 0,1 ...,text.length触发setInterval()函数。

有人可以指导我吗?

2 个答案:

答案 0 :(得分:0)

基本上setInterval以及时迭代执行函数。和setInterval为您提供随时取消它的承诺。

var myPromise = setInterval(function(){
  //some code here
},delayMiliseconds);

取消此代码

clearInterval(myPromise);

答案 1 :(得分:0)

this question相关的问题是将参数传递给setInterval()的错误方法。我传递给setInterval()的回调函数维护对“i”的引用,而不是“i”的快照值,因为它存在在每个特定的迭代期间......

<h1 id="text" style="margin-top:100px;">SOME TEXT</h1>

<script>
    var text = document.getElementById("text").innerHTML.split("");
    var myArr = document.getElementById("text").innerHTML.split("");
    for (i = 0; i < text.length; i++) {
        var handle = setInterval(function (k) { xyz(k) }, 100,i);

        setTimeout(function (handle, i) {
            console.log(i);
            console.log(text[i]);
            myArr[i] = text[i];
            clearInterval(handle);
        }, (i) * 1000,handle,i);
    }
    function xyz(index) {
        myArr[index] = String.fromCharCode(Math.random() * 26 + 65);
        document.getElementById("text").innerHTML = myArr.toString();       
    }
</script>