长话短说明我知道为什么setTimeout在.each函数中不起作用,但是我试图开始工作的情况有点复杂。
这次我有两个循环,一个内部和外部。必须按照这个确切的顺序执行操作,否则结果将不正确,这意味着每个SetTimeout()必须停止其他所有操作。此外,每个功能的超时时间必须是随机的。
// First Loop
$('.items').each(function(e) {
// Something to do
setTimeout(function() {
// Code that does it
// Something else to do
setTimeout(function() {
// Code that does it
// Second Loop
$('.inner-items').each(function(e) {
// Something to do
setTimeout(function() {
// Code that does it
// Something else to do
setTimeout(function() {
// Code that does it
// Why not a third
setTimeout(function() {
// Code that does it
}, Math.random());
}, Math.random());
}, Math.random());
});
}, Math.random());
}, Math.random());
});
答案 0 :(得分:0)
这可能有用。还没有测试,但想法是从等待时间0开始,然后每次你想要“停止”这个功能你真的只是在等待时间添加一个新的随机数,所以每个setTimeout都在等待所有在它之前添加的时间以及新增的随机时间。
另外,重要的是,在第二个循环中,循环遍历当前迭代的项目的子项而不是所有.inner项目。我添加$(this).find('.inner-items')
来执行此操作。
var waitTime = 0;
// First Loop
$('.items').each(function(e) {
// add to wait time
waitTime += Math.random();
// Something to do
setTimeout(function() {
// Code that does it
}, waitTime);
// add to wait time
waitTime += Math.random();
// Something else to do
setTimeout(function() {
// Code that does it
}, waitTime);
// Second Loop
$(this).find('.inner-items').each(function(e) {
// add to wait time
waitTime += Math.random();
// Something to do
setTimeout(function() {
// Code that does it
}, waitTime);
// add to wait time
waitTime += Math.random();
// Something else to do
setTimeout(function() {
// Code that does it
}, waitTime);
// add to wait time
waitTime += Math.random();
// Why not a third
setTimeout(function() {
// Code that does it
}, waitTime);
});
});
刚刚测试过,似乎有效。每次添加时,我添加了至少500和2000,以便更好地可视化按顺序和随机时间触发的事件。
此外,我不确定你的意思“setTimeout在.each函数中不起作用”。但是通过使用自执行函数,我可以迭代当前项并在setTimeout中使用。