如何在Javascript中延迟执行?

时间:2017-02-26 15:24:53

标签: javascript jquery html

我发誓我正在寻找解决这个问题的方法,在我问这里之前的几个小时,我发现了一些代码,但仍然没有任何东西适合我需要的......事情就是我有一些盒子和一个按钮滚动随机样式...当我单击按钮时,以下代码开始;

l = "ACGT"

from itertools import product    
print([''.join(s) for s in product(l, repeat=2)])
# ['AA', 'AC', 'AG', 'AT', 'CA', 'CC', 'CG', 'CT', 'GA', 'GC', 'GG', 'GT', 'TA', 'TC', 'TG', 'TT']

它在1到10之间随机选择,并将样式类更改为该框...所以...在循环之后的行中,我假装将原始阶梯放回原位,因此它给出了随机选择的外观。但它没有执行,如果我把它放在for循环中它执行inmediatly并且似乎没有发生任何事情...即时通讯Javascript noob我正在尝试这个学习和练习!...提前感谢您的帮助! ...

3 个答案:

答案 0 :(得分:1)

您可以创建一个随机设置所选类的setInterval,并使用setTimeout结束所述间隔的执行,如下所示:https://jsfiddle.net/canastro/xxdbjm4n/1/

const refreshIntervalId = setInterval(() => {
    $('.selected').removeClass('selected');
  const res = Math.floor(Math.random() * 10) + 1;
  $(`.slot-${res}`).addClass('selected');
}, 500)

setTimeout(() => {
    clearInterval(refreshIntervalId);
}, 3000);

答案 1 :(得分:0)

你可以使用setTimeout(function(){dosomething},timeout),顺便说一句。添加console.log('something')以查看函数是否实际执行。

顺便说一句。如果你正在使用间隔记住你可能需要取消它,如果你不希望它运行forver,你也可以使用重复功能(一个函数调用自身),在某些条件下何时进行处理或现在。

btw2。每次创建间隔时都会将其分配给某个变量或其他东西,以便取消它!

答案 2 :(得分:0)

你的答案应该是这样的。你需要看到javascript变量范围。

 function roll(){
 
  for (i = 0; i < 4; i++) {
      var res = Math.floor(Math.random() * 10) + 1;
      function active(res){
        setTimeout(function(){ 
        document.getElementById("slot-" + res).className = "col-sm-2 slot-active"; 
      }, 500);
        document.getElementById("slot-" + res).className = "col-sm-2 slot"; 
      }
      active(res);
   } 
};
div{
 width:50px;
 height:50px;
 background:#ccc;
 float:left;
 margin:5px;
}
.slot{
 background:#0f0;
}
.slot-active{
 background:#f00;
}
<button onclick="roll()" style="display:block;">roll</button>
<div id="slot-1"></div>
<div id="slot-2"></div>
<div id="slot-3"></div>
<div id="slot-4"></div>
<div id="slot-5"></div>
<div id="slot-6"></div>
<div id="slot-7"></div>
<div id="slot-8"></div>
<div id="slot-9"></div>
<div id="slot-10"></div>