setInterval и setTimeout - PullRequest
       12

setInterval и setTimeout

1 голос
/ 22 февраля 2012
var myTimer = setInterval(function(){
    var eleID = '';
    var delayTimer = '';
    $('#hp-fcas li').each(function(i) {
        eleID = $(this).attr('id');
        delayedTrigger( $('#'+eleID + ' a'), 7000*i);
    });
    function delayedTrigger(elem, delay){
        setTimeout(function(){
            $(elem).trigger('click');
        }, delay );
    }
}, 21000);

$(".play").click(function(){
    clearTimeout();
    clearInterval(myTimer);
});

Первый интервал составляет 21 секунду, первого экземпляра.

2-й интервал - это 3 7-секундных экземпляра (что я хочу).

Я пытаюсь очистить все вышеперечисленное, когда нажимаю .play.

Любая помощь?

1 Ответ

4 голосов
/ 22 февраля 2012

clearTimeout необходимо передать идентификатор тайм-аута, этот идентификатор возвращается setTimeout.

clearTimeout(); ничего не делает. Вы можете поместить возвращаемые значения из setTimeout в массив, а затем выполнить цикл по ним и запустить clearTimeout.

var timeouts = []; // Array of timeouts
var myTimer = setInterval(function(){
    var eleID = '';
    var delayTimer = '';
    $('#hp-fcas li').each(function(i) {
        eleID = $(this).attr('id');
        delayedTrigger( $('#'+eleID + ' a'), 7000*i);
    });
    function delayedTrigger(elem, delay){
       timeouts.push(setTimeout(function(){ // push onto array
           $(elem).trigger('click');
       }, delay));
    }
}, 21000);

$(".play").click(function(){
    $.each(timeouts, function(i,v){ // clear all timeouts
       clearTimeout(v);
    });
    clearInterval(myTimer);
});
...