Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.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 我如何使用setTimeout减慢这个js的速度?_Javascript_Jquery - Fatal编程技术网

Javascript 我如何使用setTimeout减慢这个js的速度?

Javascript 我如何使用setTimeout减慢这个js的速度?,javascript,jquery,Javascript,Jquery,我想用2秒钟的停顿来慢慢旋转字符串中的字母 我尝试使用setTimeoutfunction,延迟,但它不会暂停,它在一秒钟内运行整个脚本。我该怎么做 我的密码在 js: 我得到了这个输出,但所有这些都是立即得到的,不是一步一步得到的 setTimeout在参数中使用函数。在代码setTimeoutdisplaystring中,2000;,将调用函数displaystring的结果传递给setTimeout。要使这一点更加明显,请将其指定给如下变量: var result = display(st

我想用2秒钟的停顿来慢慢旋转字符串中的字母

我尝试使用setTimeoutfunction,延迟,但它不会暂停,它在一秒钟内运行整个脚本。我该怎么做

我的密码在

js:

我得到了这个输出,但所有这些都是立即得到的,不是一步一步得到的

setTimeout在参数中使用函数。在代码setTimeoutdisplaystring中,2000;,将调用函数displaystring的结果传递给setTimeout。要使这一点更加明显,请将其指定给如下变量:

var result = display(string); // undefined
setTimeout(result, 2000); // Not right
<div class="rotating-text"> rotate me</div>
<script>
  setInterval(function(){
    $('.rotating-text').each(function(){
      var string = $(this).text();
      string = string[0,string.length - 1] + string.slice(0,-1);
      $(this).text(string);
    });
  }, 2000);
</script>
您需要使用以下内容,或者只创建一个返回函数的函数:

setTimeout(function () {
  // Modify your string here
  string=string[0,string.length - 1] + string.slice(0,-1);
  display(string)
}, 2000);
setTimeout在参数中使用函数。在代码setTimeoutdisplaystring中,2000;,将调用函数displaystring的结果传递给setTimeout。要使这一点更加明显,请将其指定给如下变量:

var result = display(string); // undefined
setTimeout(result, 2000); // Not right
<div class="rotating-text"> rotate me</div>
<script>
  setInterval(function(){
    $('.rotating-text').each(function(){
      var string = $(this).text();
      string = string[0,string.length - 1] + string.slice(0,-1);
      $(this).text(string);
    });
  }, 2000);
</script>
您需要使用以下内容,或者只创建一个返回函数的函数:

setTimeout(function () {
  // Modify your string here
  string=string[0,string.length - 1] + string.slice(0,-1);
  display(string)
}, 2000);

setTimeout是异步的,这意味着for循环将立即完成。而且您直接调用display,而不是传递函数引用。使用回调的相同算法如下所示:

var result = display(string); // undefined
setTimeout(result, 2000); // Not right
<div class="rotating-text"> rotate me</div>
<script>
  setInterval(function(){
    $('.rotating-text').each(function(){
      var string = $(this).text();
      string = string[0,string.length - 1] + string.slice(0,-1);
      $(this).text(string);
    });
  }, 2000);
</script>
jsfiddle:


setTimeout是异步的,这意味着for循环将立即完成。而且您直接调用display,而不是传递函数引用。使用回调的相同算法如下所示:

var result = display(string); // undefined
setTimeout(result, 2000); // Not right
<div class="rotating-text"> rotate me</div>
<script>
  setInterval(function(){
    $('.rotating-text').each(function(){
      var string = $(this).text();
      string = string[0,string.length - 1] + string.slice(0,-1);
      $(this).text(string);
    });
  }, 2000);
</script>
jsfiddle:


摆脱循环,只需递归每次传入字符串的相同函数。此代码无休止地重复,因此您可能希望根据自己的需求添加一个条件

function thing(string) {
  string = string[0, string.length - 1] + string.slice(0,-1);
  $("h2#result").html( $( "<h3>" + string + "</h3>" ) );
  setTimeout(thing, 2000, string);
}

thing(string);

摆脱循环,只需递归每次传入字符串的相同函数。此代码无休止地重复,因此您可能希望根据自己的需求添加一个条件

function thing(string) {
  string = string[0, string.length - 1] + string.slice(0,-1);
  $("h2#result").html( $( "<h3>" + string + "</h3>" ) );
  setTimeout(thing, 2000, string);
}

thing(string);

您正在立即开始2秒等待setTimeout的所有实例。修复代码的最简单方法是每次循环时增加等待时间:

更改此项:

setTimeout(display(string), 2000);
为此:

setTimeout(display(string), (i+1)*2000);
或者,您可以使用setInterval以2秒的间隔更新单个HTML元素,如下所示:

var result = display(string); // undefined
setTimeout(result, 2000); // Not right
<div class="rotating-text"> rotate me</div>
<script>
  setInterval(function(){
    $('.rotating-text').each(function(){
      var string = $(this).text();
      string = string[0,string.length - 1] + string.slice(0,-1);
      $(this).text(string);
    });
  }, 2000);
</script>
此示例适用于具有类旋转文本的所有内容


您正在立即开始2秒等待setTimeout的所有实例。修复代码的最简单方法是每次循环时增加等待时间:

更改此项:

setTimeout(display(string), 2000);
为此:

setTimeout(display(string), (i+1)*2000);
或者,您可以使用setInterval以2秒的间隔更新单个HTML元素,如下所示:

var result = display(string); // undefined
setTimeout(result, 2000); // Not right
<div class="rotating-text"> rotate me</div>
<script>
  setInterval(function(){
    $('.rotating-text').each(function(){
      var string = $(this).text();
      string = string[0,string.length - 1] + string.slice(0,-1);
      $(this).text(string);
    });
  }, 2000);
</script>
此示例适用于具有类旋转文本的所有内容

您可以使用.queue、.delay

严格使用; var elem=$h2result; var string=旋转此字符串; elem.append+string .queue_fx,$.mapArraystring.length,functionvalue{ 返回函数下一步{ string=string[0,string.length-1]+string.slice0,-1; $this.delay2000.queuefunction{ $this.append+string.dequeue; 下一个 } } }.dequeue_fx JS 用于:字符串旋转 结果:您可以使用.queue、.delay

严格使用; var elem=$h2result; var string=旋转此字符串; elem.append+string .queue_fx,$.mapArraystring.length,functionvalue{ 返回函数下一步{ string=string[0,string.length-1]+string.slice0,-1; $this.delay2000.queuefunction{ $this.append+string.dequeue; 下一个 } } }.dequeue_fx JS 用于:字符串旋转
结果:我接受了安迪的答案,也基于此,我创建了这个版本,只滚动一次:

<h1>JS</h1>
<h2 id='for'>For: String Rotation</h2>
<h2 id='result'>Result:</h2>

'use strict';

function rotate(string) {
  string = string[0, string.length - 1] + string.slice(0,-1);
  $("h2#result").html( $( "<h3>" + string + "</h3>" ) ).animate(100);
  rotations+=1
  if (rotations > string.length) {
    return;
  }
  setTimeout(rotate, 50, string);
}

var string="rotate this string ";
var rotations=0
rotate(string);

我接受了安迪的答案,也基于此,我创建了这个版本,只滚动一次:

<h1>JS</h1>
<h2 id='for'>For: String Rotation</h2>
<h2 id='result'>Result:</h2>

'use strict';

function rotate(string) {
  string = string[0, string.length - 1] + string.slice(0,-1);
  $("h2#result").html( $( "<h3>" + string + "</h3>" ) ).animate(100);
  rotations+=1
  if (rotations > string.length) {
    return;
  }
  setTimeout(rotate, 50, string);
}

var string="rotate this string ";
var rotations=0
rotate(string);

fiddle at

setTimeout是异步的,这意味着for循环正在中间完成。而且您直接调用display,而不是传递函数引用。我可以写一个快速的解决方案,如果你想你必须使用回调函数来完成你想做的事情,那么SetTimeout是异步的,这意味着for循环是在中间完成的。而且您直接调用display,而不是传递函数引用。我可以写一个快速的解决方案,如果你想你必须使用回调函数来完成你试图在setTimeoutdisplaystring,2000;首先运行函数display,并将其结果传递给setTimeout。这就是为什么最后一段代码中的匿名函数最有效的原因——我们传递的是一个函数,而不是setTimeoutdisplaystring,2000中函数的结果;首先运行函数display,并将其结果传递给setTimeout。这就是为什么最后一段代码中的匿名函数最有效的原因——我们传递的是一个函数,而不是function@Andy我刚刚试过,函数在计时器开始之前被计算。很抱歉,你是对的。@Andy我刚试过,函数在计时器开始之前被计算过。对不起,你是对的。