Как сделать бесконечную анимацию jquery?
Я пытаюсь реализовать функцию jQuery с бесконечным циклом, чтобы анимировать фон тела тремя цветами. Я не могу придумать хорошее и чистое решение.
Что-то вроде этого?
$(document).ready(function(){
$('body').animate({backgroundColor:'#ffcc00'}, 500, function(){
$('body').animate({backgroundColor:'#eeeeee'}, 500, function(){
$('body').animate({backgroundColor:'#3b5998'}, 500);
});
});
});
Любая идея?
Ответы
Ответ 1
Вы можете устранить вложенность, но решение немного толще:
var cols = "#ffcc00,#eeeeee,#3b5998".split(",")
var cPos = 0
$(document).ready(function() {
swapC()
}
function swapC() {
$('body').animate({ backgroundColor:cols[cPos] }, 500)
cPos++
if (cPos == cols.length) {
cPos = 0
}
window.setTimeout(function() { swapC() }, 500)
}
Ответ 2
$(document).ready(function(){
function animate() {
$('body').animate({backgroundColor:'#ffcc00'}, 500, function(){
$('body').animate({backgroundColor:'#eeeeee'}, 500, function(){
$('body').animate({backgroundColor:'#3b5998'}, 500, function(){
animate();
});
});
});
}
animate();
});
Ответ 3
$(document).ready(function(){
colors = ['#FFB30C', '#58EC00', '#0087EC', '#EEEEEE', '#FF5A00' ]
var i = 0;
animate_loop = function() {
$('body').animate({backgroundColor:colors[(i++)%colors.length]
}, 500, function(){
animate_loop();
});
}
animate_loop();
});
Демо: http://jsfiddle.net/bHEVr/
Ответ 4
$(".elementsToAnimate").each(function setAnim(){
$(this).
animate({backgroundColor:'#ffcc00'},500).
animate({backgroundColor:'#eeeeee'},500).
animate({backgroundColor:'#3b5998'},500,setAnim);
});
Ответ 5
Вызвать функции анимирования в обратном вызове animate().
См. этот пример в форуме jQuery
jQuery.fn.fadeInOut = function() {
var newOpacity = this.is(":visible") ? 0 : 1;
this.animate({ opacity: newOpacity }, function() {
$(this).fadeInOut();
});
return this;
};
$("#mydiv").fadeInOut();
Ответ 6
Я предпочел бы использовать подход, управляемый событиями:
$(document).ready(function(){
$('body').on('color1', function () {
$(this).animate({backgroundColor:'#ffcc00'}, 500, function(){
$(this).trigger('color2');
});
});
$('body').on('color2', function () {
$(this).animate({backgroundColor:'#eeeeee'}, 500, function(){
$(this).trigger('color3');
});
});
$('body').on('color3', function () {
$(this).animate({backgroundColor:'#3b5998'}, 500, function(){
$(this).trigger('color1');
});
});
// Kick-off the infinite loop by firing one of the events
$('body').trigger('color2');
});
Посмотрите это решение в действии:
http://jsfiddle.net/perituswebdesign/f5qeo6db/1/
Ответ 7
function blabla(){
$('body').animate({backgroundColor:'#ffcc00'}, 500, function(){
$('body').animate({backgroundColor:'#eeeeee'}, 500, function(){
$('body').animate({backgroundColor:'#3b5998'}, 0,function (){
setTimeout(blabla,500);
});
});
});
}
UNTESTED
Ответ 8
Я очень рекомендую плагин синхронизации jQuery (2KB) (GitHub и Документы).
Он обеспечивает легкую в использовании бесконечную анимацию и многое другое. Посмотрите:
$(document).ready(function(){
$('body').animate({backgroundColor:'#ffcc00'}).wait(500)
.animate({backgroundColor:'#eeeeee'}).wait(500)
.animate({backgroundColor:'#3b5998'}).wait(500)
});
Ответ 9
Попробуйте следующее: http://jsfiddle.net/hBBbr/
$(document).ready(function(){
animate_loop = function animate_loop(){
$( "#animated_banner" ).animate({
opacity: 0.1,
}, 1000,function(){
$( "#animated_banner").animate({ opacity: 1},1000)
animate_loop();
} );
}
animate_loop();
});
Ответ 10
Я знаю это спустя годы, но я думаю, что это может быть проблемой для кого-то, как это было для меня с jquery v1.10.2.
Во всяком случае, после нескольких часов попыток разобраться с этим, я закончил использовать следующий код для многоуровневых фонов с этот плагин:
// Self-calling functions for animation auto-repeat
var cssanimfx={
bgb:function(o){
o=$(o?o:this);
o.css({backgroundPosition:'0px 0px'}).animate({backgroundPosition:"3000px -3000px"},500000,'linear',cssanimfx[o.attr('id')]);
},
bgm:function(o){o=$(o?o:this);o.css({backgroundPosition:'0px 0px'}).animate({backgroundPosition:"3000px -3000px"},250000,'linear',cssanimfx[o.attr('id')])},
bgf:function(o){o=$(o?o:this);o.css({backgroundPosition:'0px 0px'}).animate({backgroundPosition:"3000px -3000px"},50000,'linear',cssanimfx[o.attr('id')])}
// ...
}
// Initialize animation
for(id in cssanimfx)cssanimfx[id]('#'+id);
Схема именования выглядит следующим образом: я создаю вложенные DIV и присваиваю им ID s в HTML. В части JS те же самые ID используются для ввода свойств объекта, содержащего все функции самозапускания на анимацию. Демо здесь.