22 Stimmen

Kann eine setInterval-Funktion sich selbst anhalten?

Ich habe eine jsFiddle ein Beispiel, an dem wir arbeiten können.

$().ready(function() {
    $('.test').each(function() {
        $this = $(this);
        $this.data('Worker', function() {
            $('#stop').html((parseInt($('#stop').html()) + 1))
        })
        setInterval($this.data('Worker'), 100);
    });

    $('#stop').click(function() {
        // I want the worker function to stop being triggered here
        $('.test').remove();
    });
});

Ich möchte eine Worker-Funktion an ein Element im DOM anhängen, so dass, wenn das Element entfernt wird, die Worker-Funktion stoppt.

Ist so etwas möglich?

0voto

zneak Punkte 129366

Es ist eine wenig bekannte Tatsache, aber setInterval gibt einen Wert zurück, den Sie mit clearInterval um das Intervall abzubrechen.

var result = setInterval(function, delay);
// at some point later...
clearInterval(result);

0voto

Michael Dean Punkte 1416

Verwenden Sie clearInterval:

$().ready(function () {
    $('.test').each(function () {
        $this = $(this);
        $this.data('Worker', function () { $('#stop').html((parseInt($('#stop').html()) + 1)) })
        $this.data('intervalId', setInterval($this.data('Worker'), 100));
    });

    $('#stop').click(function () {
        $('.test').each(function() { clearInterval($(this).data('intervalId')); }).remove();
    });
});

0voto

Erik Campobadal Punkte 695

Javascrip verwendet eine andere Reihenfolge für die Bewertung von Aufgaben. Das heißt, sie werden von links nach rechts ausgewertet, was bedeutet, dass Sie die Variable innerhalb ihres Ausdrucks verwenden können.

const stop = setInterval(() => {
  // Execute the function body.
  console.log('Executed')
  // When you want to stop it, you
  // can clear the interval with the
  // stop handler.
  clearInterval(stop)
}, 1000)

In diesem speziellen Beispiel wird das Intervall nur einmal ausgeführt und 1 Sekunde nach seiner Definition wieder gelöscht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X