animate() 不连续工作



我想在jQuery中使用animate()连续地对#ani进行动画处理。我的代码只能工作一次。如何制作此动画循环?

这是我的代码,你可以在这里看到一个在线演示。

.HTML

<div id="ani">animation</div>

脚本

$('#ani').css('position','absolute');
setTimeout(function(){
    $('#ani').animate({top:'-10px'},2000)
},100);
setTimeout(function(){
    $('#ani').animate({top:'20px'},2000)
},100);
$('#ani').css('position','absolute');
function loop(){
    $('#ani').animate({top:'-10px'},2000,function(){
        $('#ani').animate({top:'20px'},2000,function(){
               loop();            
        }) ;                
    })    
}
loop()               

我想你可以看到修改后的在线演示:http://jsfiddle.net/9hN2g/5/

你需要使用 setInterval() ,而不是 setTimeout() ,并将动画的第二部分调用为第一部分的回调。试试这个:

function animate() {
    $('#ani').stop(true, true).animate({ top: '-10px' }, 1000, function() {
        $('#ani').stop(true, true).animate({ top: '20px' }, 1000)
    })
}
animate(); // on load
setInterval(animate, 2000); // set to run continously

示例小提琴

您当前的代码是:

  1. 从现在开始十分之一秒(100ms),开始一个 2 秒的动画,将#ani移动到 -10px。
  2. 在同一时间(另一个100ms),开始另一个 2 秒动画,#ani移动到 20px。

jQuery在这里所做的是将第二个动画排队。您的代码可以编写为:

setTimeout(function(){
    $('#ani').animate({top:'-10px'}).animate({top:'20px'}),2000);
},100);

连续动画需要的是使用 callbacks ;一个在动画完成时调用的函数。

function moveUp() {
   $('#ani').animate({ top: -10 }, 2000, moveDown);
}
function moveDown() {
   $('#ani').animate({ top: 20 }, 2000, moveUp);
}
setTimeout(moveUp, 100);

使函数递归。

$('#ani').css('position', 'absolute');
anim1();
function anim1() {
    setTimeout(function() {
        $('#ani').animate({
            top: '-10px'
        }, 2000, function(){
            anim2();
        });
    }, 100);
}
function anim2() {
    setTimeout(function() {
        $('#ani').animate({
            top: '20px'
        }, 2000, function(){
            anim1();
        });
    }, 100);
}​


DEMO

http://jsfiddle.net/9hN2g/8/看到一次,只需将setTimeout()函数替换为setInterval()即可。

浏览一次此链接,以更好地了解差异黑白这两个乐趣的 http://www.whadiz.com/what-is.aspx/programming/javascript/settimeout-versus-setinterval

$('#ani').css('position','absolute');
setInterval(function(){
    $('#ani').animate({top:'-10px'},2000)
},100);
setInterval(function(){
    $('#ani').animate({top:'20px'},2000)
},100);

最新更新