2011-11-23 73 views

回答

1

而不是setinterval也许你可以为animate()创建一个回调函数,重新动画“this”并将其自身称为回调?

[编辑] 我删除了一点不必要的代码:

http://jsfiddle.net/8kgAB/1/

DoPopulateSoundBoard(); 
function DoPopulateSoundBoard(){ 
    $('.sound-syn-column').each(function(){ 
     var dSoundSyn = ''; 
     for(i = 0; i <= 8; i++){ 
       dSoundSyn += "<div class='ui-corner-all sound-syn'></div>"; 
      } 
     $(this).append(dSoundSyn + "<div class='sound-syn-cover'></div>"); 
    }); 




     $('.sound-syn-cover').each(function(){ 
        test34($(this)); 
     }); 

} 

function test34(obj){ 
    obj.animate({height: Math.floor(Math.random()*56) }, 500, function(){ 
      test34($(obj)); 
    });  
} 

不知道这是任何更快,但也可能是因为setInterval的速度很慢。

+0

请,研究什么的里面'this'当它里面'$(。如果我没有弄错,'this'在'$(...)each(function(){//)中的时候''this每个(function(){console.log(this)})'.. -1 –

+0

这个})'指的是每个目前正在处理的对象......这将解释为什么我的代码正常工作。你想说什么?你能向我解释我做错了什么吗? – BumbleShrimp

+0

@tereško我在each()回调中运行了console.log($(this)),它记录了正在动画的元素,这正是我们想要传递给函数的元素。你能解释我做错了什么,所以我可以更新答案吗? – BumbleShrimp

0

您可以通过添加独立setInterval()功能分配到每个div只有一次分离setInterval().each()

$('.sound-syn-cover').each(function(){ 
    var $this = $(this); 
    $this.data('intervalCallback', setInterval(function(){ 
     $this.animate({height: Math.floor(Math.random()*56) }, 500); 
    }, 300)); 
}); 

jsFiddle