Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Остановка выполнения функции .each() (https://javascript.ru/forum/misc/36136-ostanovka-vypolneniya-funkcii-each.html)

TylerDurden 05.03.2013 00:21

Остановка выполнения функции .each()
 
Существует некоторое меню, при клике на которое вываливается список превью фотографий с задержкой и эффектом .fadeIn() как уже обратили внимание использую jQuery.

При частом переключении по ссылкам меню, список фото с одного раздела наваливается на другой и обратно, по причине того, что цикл ещё выполняет предыдущее действие, а его уже просят делать новое.

У меня вопрос, можно ли как-то осуществить прерывание выполнения цикла при клике по новому разделу, например как .stop() при выполнение анимации.animate() и как это можно реализовать? Перепробовал варианты с методом .stop(), но безуспешно.

Вот моя функция

function showElement(){
	element = showSection.find("ul li");
	element.each(function(e){
		$(this).delay(50 * e).fadeIn(500);
	});
}


Собственно, спасибо за внимание.

Deff 05.03.2013 00:39

function showElement(){
	element = showSection.find("ul li");
	Length = element.length;
  function showEl(i){
            if(i<Length){$(element[i]).fadeIn(500,function (){i++;showEl(i);});
  } showEl(0);
}

TylerDurden 05.03.2013 02:01

Ошибки не вываливает но фото уже не отображаются..
при том, что даже алерт в функции showEl() не отрабатывает.

danik.js 05.03.2013 05:03

each выполняется настолько быстро что вы его не успеете вручную прервать :)
Тут видимо дело в накоплениии delay()

Deff 05.03.2013 10:31

Цитата:

Сообщение от TylerDurden
алерт в функции showEl() не отрабатывает.

Поправил

TylerDurden 05.03.2013 22:36

Спасибо, но отрабатывает ещё хуже чем было)

Deff 06.03.2013 02:31

Цитата:

Сообщение от TylerDurden
Спасибо, но отрабатывает ещё хуже чем было)

:) А если без задержки ? (убрал .delay(50 * e)
Вообще не дело на ощупь подсказывать, минимальный работучий пример нужон


Часовой пояс GMT +3, время: 01:47.