2013-09-25 1 views
2

У меня есть индикаторы, связанные с каждым слайдом, но когда я достигаю 11-го слайда, он останавливается, если я снова продолжаю кататься по слайдам. Мне нужно, чтобы он вернулся к одному после того, как он достиг 12-го. может кто-нибудь помочь.Как я могу заставить это перезапустить цикл после того, как он попадает на последний слайд?

for (var i = 1; i <= 12; i++) { 
    if (jQuery('#slide-' + i).is(':visible')) { 
    console.log('#slide-' + i); 
    jQuery('#page_count-' + i).addClass('active'); 
} else { 
    jQuery('#page_count-' + i).removeClass('active'); 
    }; 
}; 

я попробовал: , если (I = 12) { = 1; };

но это ломает страницу .... любые идеи?

+0

попробуйте изменить его на '' if (i === 12) {i = 1;} ''. Знайте, что способ, которым настроен цикл for, теперь приведет к бесконечному циклу, который может перегрузить ваш механизм javascript и сделать ваш браузер безответным. – Kippie

+1

Видя, как многие люди просто копируют свои ошибки. setTimeout/setInterval, люди! – Kippie

+0

+1 для обеспечения кода и возникновения некоторого спора :) –

ответ

0
function repeat(i) { 
     i++; 

     if (jQuery('#slide-' + i).is(':visible')) { 
      console.log('#slide-' + i); 
      jQuery('#page_count-' + i).addClass('active'); 
     } else { 
      jQuery('#page_count-' + i).removeClass('active'); 
      }; 
     i = i % 12; 
     if(i == 0) { 
      setTimeout(function() { 
       repeat(0); 
      },5000); // delay of 5 seconds. 
     } 
     else { 

      repeat(i); 
     } 
    } 

repeat(0); 

EDIT: Как предложено TrueBlueAussie, удалено решение петли.

EDIT 2: Глупые логические ошибки, исправлены, опять же благодаря TrueBlueAussie. Это быстро вызовет первые 12 вызовов, а затем задержится на 5 секунд, а перезапустится.

+0

Второй ответ лучше, но ради счастья удалите свой первый ответ (он ничего не сделает, кроме классов обновления 1000 раз в секунду ... эффективно ничего не делает) :) –

+0

спасибо всем за ваши быстрые ответы .... я буду реализовывать ваши идеи и посмотреть, что я получу. Еще раз спасибо – HRone

+0

Вы можете получить один и тот же числовой обертку с помощью 'i = (i-1)% 12 + 1'. Также вы намеревались передать 1 или i в обратном вызове таймера? Что-то странное происходит там. –

2

Лично я использовал бы рекурсивную функцию для этого вместо цикла.

var current_slide = 1; 
var number_of_slides = 3; 
var time_between_slides = 3000; // ms 
var nextSlide = function() { 

    // do your stuff that changes slides here 

    if (current_slide < number_of_slides) { 
     current_slide++; 
    } else { 
     current_slide = 1; 
    } 

    window.setTimeout(function() { 
     nextSlide() // function calls its self, creating an "infinite loop" 
    }, time_between_slides); 
}; 
window.setTimeout(function() { 
    nextSlide(); // initially call the function to go to the next slide 
}, time_between_slides); 
+1

+1: Наконец-то какой-то общий (бесконечный) смысл :) –

+0

Почему рекурсия с '' setTimeout'', а не просто используя '' setInterval''? – Kippie

+1

@ Kippie - я использую setTimeout, потому что перед тем, как функция снова вызовет его self, я могу проверить его, если слайд-шоу вошло в режим паузы. –

Смежные вопросы