Javascript 我如何使用setTimeout减慢这个js的速度?
我想用2秒钟的停顿来慢慢旋转字符串中的字母 我尝试使用setTimeoutfunction,延迟,但它不会暂停,它在一秒钟内运行整个脚本。我该怎么做 我的密码在 js: 我得到了这个输出,但所有这些都是立即得到的,不是一步一步得到的 setTimeout在参数中使用函数。在代码setTimeoutdisplaystring中,2000;,将调用函数displaystring的结果传递给setTimeout。要使这一点更加明显,请将其指定给如下变量:Javascript 我如何使用setTimeout减慢这个js的速度?,javascript,jquery,Javascript,Jquery,我想用2秒钟的停顿来慢慢旋转字符串中的字母 我尝试使用setTimeoutfunction,延迟,但它不会暂停,它在一秒钟内运行整个脚本。我该怎么做 我的密码在 js: 我得到了这个输出,但所有这些都是立即得到的,不是一步一步得到的 setTimeout在参数中使用函数。在代码setTimeoutdisplaystring中,2000;,将调用函数displaystring的结果传递给setTimeout。要使这一点更加明显,请将其指定给如下变量: var result = display(st
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 atsetTimeout是异步的,这意味着for循环正在中间完成。而且您直接调用display,而不是传递函数引用。我可以写一个快速的解决方案,如果你想你必须使用回调函数来完成你想做的事情,那么SetTimeout是异步的,这意味着for循环是在中间完成的。而且您直接调用display,而不是传递函数引用。我可以写一个快速的解决方案,如果你想你必须使用回调函数来完成你试图在setTimeoutdisplaystring,2000;首先运行函数display,并将其结果传递给setTimeout。这就是为什么最后一段代码中的匿名函数最有效的原因——我们传递的是一个函数,而不是setTimeoutdisplaystring,2000中函数的结果;首先运行函数display,并将其结果传递给setTimeout。这就是为什么最后一段代码中的匿名函数最有效的原因——我们传递的是一个函数,而不是function@Andy我刚刚试过,函数在计时器开始之前被计算。很抱歉,你是对的。@Andy我刚试过,函数在计时器开始之前被计算过。对不起,你是对的。