После просмотра вашего кода я бы сказал, что основная причина задержки анимации заключается в том, что ваши фрагменты добавляются как отдельные элементы dom, и анимация вынуждена не только перемещать их, но и работать с неспецифическими селекторами ...
Поправьте меня, если я ошибаюсь, но похоже, что вы в основном выдвигаете последние наверх и перемещаете их в течение 1 секунды. Если это так, то в любой момент у вас будет только 2 кадра за раз, верно?
Я бы создал объект javascript и использовал бы его, чтобы заполнить 2 определенных элемента dom для манипуляции.
<div id="current"></div>
<div id="next"></div>
Затем управляйте CSS этих элементов посредством обратного вызова анимации и соответствующего индекса вашего объекта js.
Этот пример может не отражать ваши потребности, но основной принцип тот же:
var slices = {
current: 0,
image_arr: new Array(),
animating: false,
queue: null,
delay: 150,
init: function(){
// obviously declare these variables and access them relevantly
for(imageN=0;imageN<imageCount;imageN++)
{
this.image_arr.push($("#image img:eq("+imageN+")").attr("src"));
}
},
animate: function(){
if(!animating)
{
this.animating = true;
// cycle through your image_arr instead of crawling the dom each iteration
// set jquery animations as expected then re-call function if needed
$('#current').css('background-image', this.image_arr[current]).delay(50).animate({marginTop: '700px'}, 1000, function(){
this.current += 1; // assuming you're using an int to call the index value of image_arr
});
$('#next').css({backgroundImage: this.image_arr[current], marginTop: '-700px').delay(50).animate({marginTop: '0px'}, 1000);
this.queue = setTimeout(function(){
this.animate();
}, this.delay);
//this should obviously be more considerate, but the idea is to recursively call animate until you're through animating
}
}
};
$(document).ready(function(){
slices.init();
});
Этот пример совсем не стабилен или не протестирован и, очевидно, не будет работать, если вы копируете / вставляете, но общая идея состоит в том, чтобы вставить элементы слайса в массив или объект. Вы, конечно, можете также вставить объект для каждого среза в массив. Все, что соответствует вашим потребностям.
Но таким образом вам не нужно пересекать весь дом на каждом кадре.
Я могу ответить более конкретно, если вы скажете - опубликуйте ссылку на вашу настоящую анимацию. Поскольку я не вижу этого в действии, я просто догадался, на что я смотрю, и, возможно, я понял это совершенно неправильно.