delay
не задерживает все выполнение кода.Это только задерживает вызов определенной функции;остальная часть вашего кода выполняется сразу же, в то время как задержка идет в фоновом режиме.Таким образом, вы устанавливаете «таймер скрытия» для каждого элемента одновременно.Поскольку все они имеют одинаковую задержку в 1 секунду, все они запускаются через 1 секунду после установки.
Попробуйте вместо этого
(function() { // wrap everything in a function to avoid polluting the global namespace
var banners = $$('.banner'); // no need to create an empty array first
banners.invoke('hide'); // no need to use each
function showNextBanner() {
banners.last().hide(); // hide previous banner
banners.first().show(); // show next banner
banners.push(banners.shift()); // first element moves to become last element
showNextBanner.delay(1); // set a timeout to show the next banner
}
showNextBanner(); // start the banner rotation/looping
}());
Вот демонстрационная версия