2015-06-15 6 views
0

Вот что я пытаюсь сделать: добавьте 1 новое имя класса каждые 3 секунды, а затем остановитесь после добавления 5. Когда я запускаю этот код, он продолжает добавлять классы на неопределенный срок! Он также добавляет 3 класса все в 1 раз.setInterval in for loop

var linesOfText = ['Testing Second Part', 'Testing Third Part', 'Testing Fourth Part', 'Testing Fifth Part']; 
var j = 1; 
var total = 5; 
for (var i = linesOfText.length - 1; i >= 0; i--) { 

    var myVar = setInterval(function(){ 
     $('.vertical-effectOFF').addClass('vertical-effect-' + j); 
     j++; 
     if (j === total) { 
     console.log('stop!'); 
     clearInterval(myVar); 
     } 
    }, 3000); 
} 

ответ

1

Try вынимая Петля для изменения и j = 5 к j = 0:

var linesOfText = ['Testing Second Part', 'Testing Third Part', 'Testing Fourth Part', 'Testing Fifth Part']; 
var j = 0; 
var total = 5; 
var myVar = setInterval(function(){ 
    $('.vertical-effectOFF').addClass('vertical-effect-' + j); 
    j++; 
    if (j === total) { 
    console.log('stop!'); 
    clearInterval(myVar); 
    } 
}, 3000); 

Это добавит класс каждые 3 секунды, пока не будут добавлены 5 классов.

+0

Есть ли хороший способ добавить setTimeout после строки .addClass()? Мне нужно подождать несколько секунд, сделать что-то, а затем перейти к строке j ++. – Tom

+0

@Tom проверить эту ссылку http://stackoverflow.com/questions/951021/what-do-i-do-if-i-want-a-javascript-version-of-sleep – brso05

+0

У меня есть расширение этого вопроса здесь: http://stackoverflow.com/questions/30873346/settimeout-within-setinterval-not-firing-as-expected – Tom

0

Использование цикла for для этого не является наилучшим подходом. Он не работает так, как ожидалось, потому что он установил 5 интервалов немедленно до все выполнить через 3 секунды. Просто установите интервал для вызова по имени функции и прекратить его действие, когда j === total

var j = 1; 
var total = 5; 

var myVar = setInterval(intervalAddClass, 3000); 

function intervalAddClass() { 
    $('.vertical-effectOFF').addClass('vertical-effect-' + j); 
    j++; 
    if (j === total) { 
     console.log('stop!'); 
     clearInterval(myVar); 
    } 
} 

Кроме того, нет необходимости в linesOfText, как вы не используете его в вашем коде.