【发布时间】:2023-04-03 01:13:01
【问题描述】:
我有一个具有一系列延迟函数的函数:
function greet(t) {
$("div").delay(t*2).queue(function(n) {
$(this).html("Bonjour");
n();
});
$("div").delay(t*3).queue(function(n) {
$(this).html("Hola");
n();
});
$("div").delay(t*4).queue(function(n) {
$(this).html("Hallo");
n();
});
$("div").delay(t*5).queue(function(n) {
$(this).html("Hello"); // back to original
n();
});
}
greet(500);
在 HTML 中使用简单的<div>Hello</div>。这样,问候语每 500 毫秒更改一次语言。
函数完成后(大约需要 2 秒;2000 毫秒)我想重新启动函数并无限循环它。所以,我尝试了通常的方法:
setTimeout(function() {
greet(500);
}, 2500); // after 2500ms, repeat the function
如果您注意到,一旦它循环了两次,它就会在“Hello”处停止。为什么是这样?这是一个显示我的问题的小提琴http://jsfiddle.net/rgX6B/2/
任何帮助将不胜感激!
编辑:
我实际上是为了提出问题而简化了我的问题。我不想贴一大堵代码(内部html的更改实际上是涉及更改CSS形状位置的复杂功能。)我的问题最终通过将setTimeout inside em>函数。谢谢大家的回答!
【问题讨论】:
-
您的问候语不会每 500 毫秒更改一次。第一个是 1000ms 之后,第二个是 1500ms 之后,下一个是 2000ms 之后,以此类推。您正在使用
.queue(),但也增加了两者之间的持续时间。如果你想要每 500 毫秒,那就去掉乘法。 -
...为了解决您的问题,您根本不需要
setTimeout()。只需将greet(500)放在n();之后的最后一个回调中即可。 jsfiddle.net/rgX6B/6
标签: javascript jquery html loops delay