2016-09-29 2 views
1

Как я могу отложить выполнение анимации, состоящей из 30 последовательностей с интервалом 50 мс?Возможно использование как setTimeout, так и setInterval?

$(function() { 
    setInterval("anim1()", 50); 
    setTimeout("anim1()", 3000); /* doesn't work */ 
}); 



function anim1() { 
    var oCurBack = $('#fullback div.current'); 
    var oNxtBack = oCurBack.next(); 
    if (oNxtBack.length === 0) 
     return; 

    oNxtBack.addClass('current'); 
    oCurBack.removeClass('current').addClass('previous'); 
} 
+4

Это не совсем понятно, что вы хотите, чтобы произошло здесь. –

+0

Очистить как стекло для меня;) – mplungjan

+0

Отдельно и только касательно, посмотрите в 'requestAnimationFrame' –

ответ

3

Допущение: Вы хотите начать интервал анимации через 3 секунды

  • поставить интервал в функцию задержке
  • Я использую anim1 вместо "anim1()", поскольку использование строки является скрытой eval
  • Вы, вероятно, хотите остановить анимацию, где вы сейчас вернетесь

var tId; // have global id to store the interval 
$(function() { 
    tId = setTimeout(function() { setInterval(anim1, 50) }, 3000); 
}) 

function anim1() { 
    var oCurBack = $('#fullback div.current'); 
    var oNxtBack = oCurBack.next(); 
    if (oNxtBack.length === 0) { 
    clearInterval(tId); // clear the interval now we are done 
    return; 
    } 
    oNxtBack.addClass('current'); 
    oCurBack.removeClass('current').addClass('previous'); 
} 

Повторить анимацию каждые 4 секунды попробовать

var tId1, tId2 
$(function() { 
    tId1 = setInterval(function() { 
    var $divs = $('#fullback div.current'); 
    $divs.removeClass(current); // remove all current 
    $divs.eq(0).removeClass('previous').addClass('current'); // add on the first 
    tId2 = setInterval(anim1, 50); 
    }, 3000); 
}); 


function anim1() { 
    var oCurBack = $('#fullback div.current'); 
    var oNxtBack = oCurBack.next(); 
    if (oNxtBack.length === 0) { 
    clearInterval(tId2); // clear the interval now we are done 
    return; 
    } 
    oNxtBack.addClass('current'); 
    oCurBack.removeClass('current').addClass('previous'); 
} 
+0

Почему downvote? – mplungjan

+2

Похож на соответствующий anwser ... 'Как я могу отложить выполнение? ... –

+3

Я, конечно, не отказался бы от него. Я думаю, что вопрос слишком неясен, чтобы ответить на этот вопрос, но это не значит, что этот ответ обязательно неверен. –

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