Javascript 带嵌套超时的时间间隔
加载页面后,我需要:Javascript 带嵌套超时的时间间隔,javascript,jquery,Javascript,Jquery,加载页面后,我需要: 等7秒 aniwrap.text()-LOREM IPSUM 等7秒 aniwrap.text()-DOLOR-SIT 等等-重复暂停并更改文本 在我的尝试中,我只有第二个文本,没有第一个 有什么帮助吗 vari; var-txt=''; var arra=[“LOREM IPSUM”,“DOLOR SIT”]; var aniwrap=$(“#aniwrap”); 函数写入(){ 如果(i
- 等7秒
-aniwrap.text()
LOREM IPSUM
- 等7秒
-aniwrap.text()
DOLOR-SIT
- 等等-重复暂停并更改文本
vari;
var-txt='';
var arra=[“LOREM IPSUM”,“DOLOR SIT”];
var aniwrap=$(“#aniwrap”);
函数写入(){
如果(i
您有两个问题:$(元素/选择器)。每个(cb)
用于jQuery对象,在数组上迭代所需的是$。每个(数组,cb)
(或者只是数组。forEach
。另一个问题是您同时在循环中创建setTimeout
)。除非我遗漏了一些东西,否则实际上根本不需要single
中的循环或setTimeout
var idx = 0;
function single() {
if (idx == arra.length) {
idx = 0;
}
var val = arra[idx];
aniwrap.text('');
idx++;
i = 0;
txt = val;
write();
}
声明一个变量,该变量确定arra数组中单词的索引:
var index = 0;
我删除了each()
方法,并以不同的方式执行:
function single(){
setTimeout(function(){
index++;
...
txt = arra[index % arra.length];
...
}, 7000);
}
vari;
var指数=0;
var-txt='';
var arra=[“LOREM IPSUM”,“DOLOR SIT”];
var aniwrap=$(“#aniwrap”);
函数写入(){
如果(i
函数single
设置两个计时器回调,它们将依次执行,但或多或少会立即执行(它们都使用7000ms计时器)
在第一次计时器回调时,i
被设置为0
,而txt
被设置为LOREM IPSUM
,并且write
将输出第一个字母L
在页面刷新有机会发生之前(大多数情况下),执行第二个计时器回调,清除#aniwrap
的文本内容,将字符指针i
重置为零,并用DOLOR SIT
替换文本
现在write
将继续一次输出DOLOR-SIT
一个字母,但因为在第一次调用write
时创建的计时器从未取消,其速率是预期的两倍
这是一个时间问题。解决此问题的一种方法是为arra
中的每一行设置不同的时间延迟,另一种选择是使用一个7000ms计时器写入一行,然后使用计时器为下一行回拨
以下是第一个选项的示例,对发布的代码进行了最小修改:
“严格使用”;
var i;
var-txt='';
var arra=[“LOREM IPSUM”,“DOLOR SIT”];
var aniwrap=$(“#aniwrap”);
函数写入(){
如果(i },3500*索引);//你是不是想用70
而不是7000
超时?@AndyRay-字母键入之间的暂停是70,句子键入之间的暂停是7000你想创建一个列表吗?@sonEtLumiere-我需要上面的功能性-无论如何$(数组)。每个-你会希望这个是$。每个(数组)
$(选择器)。每个(fn)
用于元素,$。每个(数组,fn)
用于数组。但在您的情况下,数组中的单词之间的间距为3.5秒。对于OP,单词出现之间需要7秒的间隔。@s.kuznetsov但为了便于说明,查看结果会更快。