Domanda

Sembra che tutti abbiano alcuni problemi con Clearinterval.Ho costruito un cursore che consente alle persone di fare un clic su frecce.Anche il banner ruota mai pochi secondi.Voglio essere in grado di disattivare l'auto-rotazione dopo che qualcuno fa clic su una delle frecce.

Ecco il mio codice:

$(function(){
    var intvl = 0;
    intvl = setInterval(heroTransitionNext, 2000);
    $('.rightArrow').click(function(){
       window.clearInterval(intvl);
    });
});
.

Modifica:

Ecco la funzione che sta chiamando:

function heroTransitionNext() {
    $('.HP-hero li').filter(':visible').fadeOut('normal', function () {
        if ($(this).next().length != 0) {
            activeZone = parseInt(activeZone) + 1;
            $(this).next().fadeIn('normal', heroNavHighlight(activeZone));
        } else {
            activeZone = 1;
            $('.HP-hero li:first-child').fadeIn('normal', heroNavHighlight(activeZone));
        }
        $(this).hide();
    });
};
.

È stato utile?

Soluzione

Per interrompere l'animazione è possibile utilizzare jquerytagCode .stop() ma non sono sicuro se risolverà il problema o no che si sta affrontando (non ha visualizzato) ma puoi dargli un tentativo

$('.HP-hero li').stop(1,1); // or try $('.HP-hero li').stop()
window.clearInterval(intvl);
.

AS say2joe ha detto che clearInterval interromperà semplicemente la funzione di richiamare la prossima volta, ma non cancellerà la coda corrente (ha ragione), quindi è possibile utilizzare in quel caso stop.

Informazioni su Stop .

Altri suggerimenti

A seconda di quanto funziona la funzione HerotrasItitionNext, potrebbe ancora essere eseguito anche se l'intervallo è cancellato - in altre parole, la cancellazione dell'intervallo interromperà la funzione di essere invocata - ma, qualsiasi istanza della funzione (s) L'esecuzione della memoria continuerà ad eseguire fino al termine.

Per essere più chiaro, ecco un caso d'uso (puoi verificarlo usando un profiler in Firebug o Strumenti per sviluppatori):

Il tempo di esecuzione di HerotrasItitionNext è di 2,1 secondi. Clearinterval è invocato 6,1 secondi dopo che il setinterval è invocato. A 6,1 secondi, HerotrasitionNext è stato invocato quattro volte. Le prime tre esecuzioni hanno completato, tuttavia, il quarto non completerà fino a quando non terminerà l'esecuzione (a 8,1 secondi da quando è stato chiamato SetInterval). NOTA: in questo caso di utilizzo, ogni invocazione successiva verrà eseguita mentre l'esecuzione dell'ultimo invocazione continua continua (per 100 più ms) - in altre parole, avrai la sovrapposizione dell'esecuzione da 2 a 2,1, 4 a 4.1 e 6 a 6.1 secondi intervalli.

Se la funzione richiede più tempo da eseguire rispetto al set di intervalli, utilizzare una funzione ricorsiva con Settimimeout (). Il seguente link ti darà un buon esempio.

Inoltre, un buon riferimento per la spiegazione è https://develward.mozilla.org/ en / dom / window.setinterval .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top