通常,当使用 jQuery 为对象设置动画时,动画会添加到该对象的队列中。当之前的动画结束时,动画开始运行。您上面的代码正是这样做的,先水平动画,然后垂直动画。
此行为可以通过使用动画的 queue 选项来覆盖(将其设置为 false)。
function loop_horiz(direction) {
var d = (direction == 1) ? '+' : '-';
$('.op').animate({
left: d + '200'
}, {
queue: false,
duration: 4000,
done: function () {
loop_horiz(direction * (-1))
}
});
}
function loop_vert(direction) {
var d = (direction == 1) ? '+' : '-';
$('.op').animate({
bottom: d + '200'
}, {
queue: false,
duration: 2000,
done: function () {
loop_vert(direction * (-1))
}
});
}
loop_horiz(1);
loop_vert(1)
另一种(更丑陋)的可能性是合并动画,但它需要您将水平动画分成两部分运行超过 2 秒的一半距离。
http://api.jquery.com/animate/
更好的是,使用队列作为字符串,您可以将动画添加到不同的队列中。与上面相同的代码,但对垂直和水平动画使用不同的队列:
function loop_horiz(direction) {
var d = (direction == 1) ? '+' : '-';
$('.op').animate({
left: d + '200'
}, {
queue: 'horizontal',
duration: 4000,
done: function () {
loop_horiz(direction * (-1))
}
}).dequeue('horizontal');
}
function loop_vert(direction) {
var d = (direction == 1) ? '+' : '-';
$('.op').animate({
bottom: d + '200'
}, {
queue: 'vertical',
duration: 2000,
done: function () {
loop_vert(direction * (-1))
}
}).dequeue('vertical');
}
loop_horiz(1);
loop_vert(1)
演示:http: //jsfiddle.net/Uewzc/1/