你实际上不需要setTimeout
,使用武力,卢克!
使用.animate()
回调循环你的函数:
现场演示
jQuery(function($) { // DOM ready
function gameLoop() {
$('h1').show("slow")
.animate({marginLeft: 300}, 4000)
.animate({marginLeft: 0 }, 4000, gameLoop); // LOOP HERE
}
gameLoop(); // START
$('h1').click(function(){
$(this).stop();
});
});
甚至更简单:DEMO
var mrg = [300,0];
(function gameLoop() {
$('h1').animate({marginLeft: mrg.reverse()[1]}, 4000, gameLoop);
})();
$('h1').click(function(){
$(this).stop();
});
缓存您的选择器以获得更好的性能
并根据当前的边距位置进行动画处理:DEMO
var $h1 = $('h1'); // Cache your selectors
(function gameLoop() {
var m = parseInt( $h1.css('marginLeft'), 10);
$h1.animate({marginLeft: m>0?0:300 }, 4000, gameLoop);
})();
$h1.click(function(){
$(this).stop();
});