Jquery 理解setInterval()并将其与.each()一起使用时遇到问题

Jquery 理解setInterval()并将其与.each()一起使用时遇到问题,jquery,timer,setinterval,Jquery,Timer,Setinterval,我在这里要做的是: 我想随时间逐1显示的元素很少。因此,我尝试使用以下代码: /*Defining an object with selectors*/ var ticks_obj = { 1: "#Pros1", 2: "#Pros2", 3: "#Pros3" }; /*Using setinterval within loop with 1 sec gap*/ jQuery.each(ticks_obj, function(index, val){

我在这里要做的是:

我想随时间逐1显示的元素很少。因此,我尝试使用以下代码:

/*Defining an object with selectors*/
var ticks_obj = {
    1: "#Pros1",
    2: "#Pros2",
    3: "#Pros3"
};

/*Using setinterval within loop with 1 sec gap*/
jQuery.each(ticks_obj, function(index, val){
       setInterval(function(){
            jQuery(val).show(500);
       }, 1000);
});
问题是:

.show()
在所有元素中同时发生。不是一个接一个

因此,我更改了代码并执行了以下操作:

/*Object Definition here*/

/*Using loop within setinterval*/
jQuery.setInterval(function(){
       jQuery.each(ticks_obj, function(index, val){    
           jQuery(val).show(500);
       });
 }, 1000);
这是没有结果的

我不明白。有人能用几句话用要点来澄清吗

另外,使用jQuery最简单的解决方案是什么?

使用

jQuery.each(ticks_obj, function(index, val){
       setTimeout(function(){
            jQuery(val).show(500);
       }, index * 1000);
});
使用

你什么时候做的

jQuery.each(ticks_obj, function(index, val){
       setInterval(function(){
            jQuery(val).show(500);
       }, 1000);
});
它迭代元素真的快,每个相应的间隔在最后一个间隔的毫秒内执行。这就是为什么它们同时出现的原因

您实际上不需要
setInterval
,因为您可以像对待
.show()
那样传递
duration
,并在每次迭代中增加
duration

var duration = 1500;
jQuery.each(ticks_obj, function(index, val){
      jQuery(val).show(duration);
      duration += 1500;
});

你什么时候做的

jQuery.each(ticks_obj, function(index, val){
       setInterval(function(){
            jQuery(val).show(500);
       }, 1000);
});
它迭代元素真的快,每个相应的间隔在最后一个间隔的毫秒内执行。这就是为什么它们同时出现的原因

您实际上不需要
setInterval
,因为您可以像对待
.show()
那样传递
duration
,并在每次迭代中增加
duration

var duration = 1500;
jQuery.each(ticks_obj, function(index, val){
      jQuery(val).show(duration);
      duration += 1500;
});


虽然这很有效,但我想OP会喜欢有一个小的解释;)嗨,它起作用了。您将
setInterval()
的第二个参数从1000更改为索引*1000。现在它变成了一个变量。那么它应该在没有设置间隔()的情况下工作。请再说一点好吗?@Nirjhar,不,没有设置间隔它不会工作。不管你如何使用设置超时,基本上我只是增加了2之间的间隔calls@Satpal是的,我明白。完全是。谢谢。虽然这很有效,但我想OP会喜欢有一个小的解释;)嗨,它起作用了。您将
setInterval()
的第二个参数从1000更改为索引*1000。现在它变成了一个变量。那么它应该在没有设置间隔()的情况下工作。请再说一点好吗?@Nirjhar,不,没有设置间隔它不会工作。不管你如何使用设置超时,基本上我只是增加了2之间的间隔calls@Satpal是的,我明白。完全是。谢谢。你的答案的第一部分是正确的,但你的建议并没有真正回答这个问题:OP不是想增加每个元素的持续时间,而是一个接一个地显示它们,延迟。@LéoLam,我知道,这就是为什么在第二部分,我增加了持续时间。这就是它将向他们展示的方式delayed@Nirjhar,看来我误解了你的意思。你不想在1500秒后显示第一个元素,3000秒后显示第二个元素,等等吗?对不起,我应该更精确一些。我的意思是,这只会使show()更长,但不会延迟它。@ammarcs我明白了重点。我的代码不工作,因为
setInterval()
在一个循环中,循环主要执行
setInterval()
在这里没有意义。清楚的现在,您建议的代码符合逻辑。但它不起作用。“…在1500秒后显示第一个元素,在3000秒后显示第二个元素,依此类推?”“是的,我想要,间隔较小,比如说500、1000、1500等等。但我真的不明白你的代码为什么不工作?答案的第一部分是正确的,但是你的建议并没有真正回答这个问题:OP并不是要增加每个元素的持续时间,而是一个接一个地显示它们,延迟。@LéoLam,我知道,这就是为什么在第二部分中,我增加了持续时间。这就是它将向他们展示的方式delayed@Nirjhar,看来我误解了你的意思。你不想在1500秒后显示第一个元素,3000秒后显示第二个元素,等等吗?对不起,我应该更精确一些。我的意思是,这只会使show()更长,但不会延迟它。@ammarcs我明白了重点。我的代码不工作,因为
setInterval()
在一个循环中,循环主要执行
setInterval()
在这里没有意义。清楚的现在,您建议的代码符合逻辑。但它不起作用。“…在1500秒后显示第一个元素,在3000秒后显示第二个元素,依此类推?”“是的,我想要,间隔较小,比如说500、1000、1500等等。但我真的不明白你的代码为什么不工作?