замкнуть ротацию списка (jQ)
Надо сделать циклическую авторотацию блоков.
Вот "наваял" такой код: $(document).ready(function(){ var timevis = 2000; var delay = 500; var counter = $(".block").length; var a = 0; setInterval(function(){ if (a > counter){$(".block").show(); a = 0;};/* как бы эти строки подсократить? */ var astring = ".block:eq(" + a +")"; if ((a + 1) > counter){$(".block").show(); a = -1;};/* как бы эти строки подсократить? */ var bstring = ".block:eq(" + (a + 1) +")"; if ((a + 2) > counter){$(".block").show(); a = -2;};/* как бы эти строки подсократить? */ var cstring = ".block:eq(" + (a + 2) +")"; $(astring).slideUp(delay); $(bstring).slideUp(delay); $(cstring).slideUp(delay); a += 3; }, timevis); }); Проблема в том, что после каждого перебора набора элементов, смена "hide" происходит только после заданной паузы... Как таковой цикличной ротации нет. Что тут можно сделать? У меня в голове крутятся два варианта: 1) После каждой итерации удалять из DOM показанные элементы и динамически вставлять их в конец набора. 2) При превышении счётчика итераций "длины набора элементов" clearInterval с рекурсией на инициализацию setInterval. Но тут мне кажется вылезут косяки и будут "дёргания" анимации... |
Разобрался! :lol:
$(document).ready(function(){ var timevis = 5000; var delay = 500; setInterval(function(){ $(".block:lt(3)").slideUp(delay); setTimeout(function(){ $(".block:lt(3)").remove().appendTo(".block_box"); $(".block").show(); }, delay); }, timevis); }); Не учёл тот момент, что манипуляции с элементами начинаются уже тогда, пока ещё идёт анимация. Поэтому надо делать отложенное выполнение части скрипта. |
Часовой пояс GMT +3, время: 15:26. |