Используя jQuery, я создаю ротатор изображений/слайдов. Основная настройка (в псевдокоде):Остановить выполнение рекурсивной функции javascript
function setupUpSlide(SlideToStartWith){
var thisSlide = SlideToStartWith;
...set things up...
fadeInSlide(thisSlide)
}
function fadeInSlide(thisSlide){
...fade in this slide...
fadeOutSlide(thisSlide)
}
function fadeOutSlide(thisSlide){
...fade out this slide...
thisSlide.fadeOut(fade, function() {
var timeout2 = setTimeout(setupUpSlide(nextSlide),100);
}
Я называю первую функцию и передать в определенном индексе слайдов, а затем он делает свое дело призвание цепочки функций, которые затем, в свою очередь, вызывает первую функцию снова передавая следующий индекс. Это затем бесконечно повторяется (сброс индекса, когда он доходит до последнего элемента).
Это работает просто отлично.
Теперь я хочу, чтобы кто-то перестал показывать слайд-шоу, нажав на определенный номер слайда. Поэтому, если отображается слайд # 8, и я нажимаю # 3, я хочу, чтобы рекурсия остановилась, а затем вызовите начальную функцию, проходящую в слайде # 3, которая затем, в свою очередь, снова запустит процесс.
Но я не уверен, как это сделать. Как правильно «разбить» рекурсивный скрипт. Должен ли я создать какую-то глобальную переменную «watch», которая, если в любое время будет «true», вернет: false и разрешит выполнение новой функции?
UPDATE: Добавлены более подробный код, показывающий SetTimeout вызов
В какой-то момент, однако, мне не нужна рекурсия, чтобы продолжить цикл? То есть, если у меня 6 слайдов, мне нужно идти от 1 до 6, а затем повторять. Используя приведенные выше методы Timeout, как включить логику for-loop для увеличения количества вызовов? –
@DA: Используя таймауты, вы можете создать бесконечный цикл, не получая переполнение стека. Каждый вызов представляет собой один шаг в вашем цикле. –
ack. Должно было посмотреть на то, что у меня уже было ближе. Оказывается, мы используем функцию setTimeout в последней функции (которая затем, в свою очередь, вызывает первую). Я обновил образец кода в исходном сообщении. Это все, что необходимо, чтобы избежать проблемы с переполнением стека? –