Nie jestem pewien, czy tego właśnie chcesz.
Animuję 20 płatków śniegu, poczekaj, aż animacja zakończy się dla wszystkich z nich, a następnie ponownie uruchom ponownie.
jsfiddle
function fallingSnow() {
var $snowflakes = $(), qt = 20;
for (var i = 0; i < qt; ++i) {
var $snowflake = $('<div class="snowflakes"></div>');
$snowflake.css({
'left': (Math.random() * $('#site').width()) + 'px',
'top': (- Math.random() * $('#site').height()) + 'px'
});
// add this snowflake to the set of snowflakes
$snowflakes = $snowflakes.add($snowflake);
}
$('#snowZone').prepend($snowflakes);
$snowflakes.animate({
top: "500px",
opacity : "0",
}, Math.random() + 5000, function(){
$(this).remove();
// run again when all 20 snowflakes hit the floor
if (--qt < 1) {
fallingSnow();
}
});
}
fallingSnow();
Aktualizacja
Wersja ta tworzy 20 DIV tylko raz, i animować je ponownie i ponownie.
jsFiddle
function fallingSnow() {
var $snowflakes = $(),
createSnowflakes = function() {
var qt = 20;
for (var i = 0; i < qt; ++i) {
var $snowflake = $('<div class="snowflakes"></div>');
$snowflake.css({
'left': (Math.random() * $('#site').width()) + 'px',
'top': (- Math.random() * $('#site').height()) + 'px'
});
// add this snowflake to the set of snowflakes
$snowflakes = $snowflakes.add($snowflake);
}
$('#snowZone').prepend($snowflakes);
},
runSnowStorm = function() {
$snowflakes.each(function() {
var singleAnimation = function($flake) {
$flake.animate({
top: "500px",
opacity : "0",
}, Math.random() + 5000, function(){
// this particular snow flake has finished, restart again
$flake.css({
'top': (- Math.random() * $('#site').height()) + 'px',
'opacity': 1
});
singleAnimation($flake);
});
};
singleAnimation($(this));
});
};
createSnowflakes();
runSnowStorm();
}
fallingSnow();
Update2
Ten jeden, który inicjuje left
raz animacja jest wykonywana dla każdego płatka, wygląda bardziej naturalnie moim zdaniem. zmienił również opóźnienie z
Math.random() + 5000
do
Math.random()*-2500 + 5000
demo
Co masz na myśli z „nie spełnia moich potrzeb” można opracować proszę? –
Dzięki za odpowiedź. Ten skrypt spowodował, że nie odpowiadał i generował obiekt automatycznie. Chcę zrobić 20 elementów div jako statyczne, a następnie ponownie przywoływać, przesuwając górę i dół –
Może to pomoże ... http: //jsfiddle.net/4cZdu/29/ – nik