我需要随机更改文字的字符,经过一段时间的延迟修复后。
有我的代码:
<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;
似乎我对setInterval的工作原理还不太了解! :(
编辑:
使用我的代码只有text [text.length + 1]字符有变化,表示传递参数到xyx()函数是循环计数器变量的最后一个值(循环结束后)。现在我的问题是如何使用i = 0,1 ...,text.length触发setInterval()函数。
有人可以指导我吗?
答案 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>