我想在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
示例小提琴
您当前的代码是:
- 从现在开始十分之一秒(
100ms
),开始一个 2 秒的动画,将#ani
移动到 -10px。 - 在同一时间(另一个
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);