Maison >interface Web >js tutoriel >Comment puis-je utiliser « clearInterval » pour empêcher « setInterval » de créer une boucle indésirable dans ma fonction « doKeyDown » ?

Comment puis-je utiliser « clearInterval » pour empêcher « setInterval » de créer une boucle indésirable dans ma fonction « doKeyDown » ?

DDD
DDDoriginal
2024-12-03 18:06:18810parcourir

How Can I Use `clearInterval` to Prevent `setInterval` from Creating an Unwanted Loop in My `doKeyDown` Function?

Utilisation des fonctions setInterval et clearInterval

Lorsque l'on considère le bloc de code suivant :

function doKeyDown(event) {
    switch (event.keyCode) {
    case 32:
        /* Space bar was pressed */
        if (x == 4) {
            setInterval(drawAll, 20);
        }
        else {
            setInterval(drawAll, 20);
            x += dx;
        }
        break;
    }
}

L'objectif est pour résoudre le problème dans le code On espère que la fonction drawAll() ne sera appelée qu'une seule fois, plutôt que de créer une boucle qui appelle continuellement la fonction.

Comment utiliser clearInterval

Afin de résoudre ce problème, vous pouvez utiliser la fonction clearInterval. La fonction setInterval définit un minuteur répétitif et renvoie un handle qui peut être transmis à clearInterval pour arrêter le minuteur :

var handle = setInterval(drawAll, 20);

// 当需要取消计时器时:
clearInterval(handle);
handle = 0; // 这样可以得知已经清除了计时器

Dans les navigateurs, le handle est garanti comme étant un nombre différent de 0, donc 0 ; est une valeur d'indicateur pratique qui signifie « la minuterie n'est pas réglée ». (D'autres plates-formes peuvent renvoyer d'autres valeurs ; par exemple, la fonction timer de Node.js renvoie un objet.)

Utilisez setTimeout

Pour planifier une minuterie qui ne se déclenchera qu'une seule fois fonction, vous pouvez utiliser la fonction setTimeout. Cela ne se déclenche pas en continu. (Il renvoie également un handle, le cas échéant, vous pouvez utiliser clearTimeout si vous devez annuler la fonction avant qu'elle ne se déclenche une fois).

setTimeout(drawAll, 20);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn