代码之家  ›  专栏  ›  技术社区  ›  regex

在javascript中连续触发多个随机超时

  •  1
  • regex  · 技术社区  · 16 年前

    我知道乍一看(由于标题)这看起来像是“你试过在发布前搜索谷歌吗?”问题,但我似乎找不到我遇到的具体问题的答案。对不起,如果我是个笨蛋…还在学习:)

    我需要在javascript中模拟暂停,但是setTimeout(函数调用,超时)函数对我不起作用。原因是…当调用该setTimeout函数时,它将异步进行函数调用。

    一点背景:
    我试图模拟文本以随机的时间间隔输入到一个DIV中。我希望它看起来像是一个人在用户查看页面时正在键入一条消息。由于超时是一个随机间隔,并且函数调用是异步进行的,因此文本最终以随机顺序打印。

    以下是迄今为止我所拥有的一小部分:

    typeString: function(s)
    {
        for(var i=0;i<s.length;i++)
        {                      
            var c = s.charAt(i);
            var temp = setTimeout("MessageType.typeChar('" + c + "')", this.genRandomTime());
        }
    }
    



    事先谢谢你的帮助。

    卡马克



    更新:通过将计时器延迟添加到变量中,它使我能够补偿异步调用的超时。感谢大家的快速反应。以下是更新后的代码:

    typeString: function(s)
    {
        var delay = 0;
    
        for(var i=0;i<s.length;i++)
        {                     
            var c = s.charAt(i);
            setTimeout("GoogleTyper.typeChar('"+c+"')", delay += this.genRandomTime());
        }
    }
    
    3 回复  |  直到 16 年前
        1
  •  3
  •   Samantha Branham    16 年前

    您是否已尝试累计设置超时?在循环外插入一个变量并将其初始化为0。现在我们称之为超时。在循环的每次迭代开始时,向这个变量添加一个随机的时间量,并使超时停止。这样,就可以确保按顺序调用函数。

        2
  •  2
  •   EndangeredMassa    16 年前

    你的问题是你使用了一个你所有的时间都被延迟从现在开始-下一个计时器需要被解雇后,上一个。只需将前一个计时器延迟添加到新计时器。

    typeString: function(s)
    {
        var delay = 0;
        for(var i=0;i<s.length;i++)
        {                      
            var c = s.charAt(i);
            delay = delay + this.genRandomTime();
            var temp = setTimeout("MessageType.typeChar('" + c + "')", delay );
        }
    }
    
        3
  •  1
  •   Assaf Lavie    16 年前

    不要将要显示的字符传递给每个计时器事件,而是让每个事件处理程序从队列(数组、列表等)中获取下一个字符,从而保持顺序。

    推荐文章