Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带嵌套超时的时间间隔_Javascript_Jquery - Fatal编程技术网

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但为了便于说明,查看结果会更快。