Problème Javascript
Résolu/Fermé
siniko44
Messages postés
172
Date d'inscription
vendredi 30 juillet 2010
Statut
Membre
Dernière intervention
29 novembre 2013
-
10 févr. 2011 à 21:58
siniko44 Messages postés 172 Date d'inscription vendredi 30 juillet 2010 Statut Membre Dernière intervention 29 novembre 2013 - 12 févr. 2011 à 17:51
siniko44 Messages postés 172 Date d'inscription vendredi 30 juillet 2010 Statut Membre Dernière intervention 29 novembre 2013 - 12 févr. 2011 à 17:51
A voir également:
- Problème Javascript
- Telecharger javascript - Télécharger - Langages
- Javascript echo ✓ - Forum PHP
- Erreur #125 javascript - Forum Mozilla Firefox
- Table de multiplication javascript ✓ - Forum Javascript
- Xxwxx dll virus javascript - Forum Virus
2 réponses
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
12 févr. 2011 à 14:26
12 févr. 2011 à 14:26
Salut,
je pense que tu fais une petite confusion entre les fonctions synchrones et asynchrones. Les termes semblent barbares mais en fait c'est assez simple : synchrone c'est ce qui se passe d'habitude, quand tu mets des instructions les unes après les autres.
Dès que tu utilises un setTimeout ou un setInterval, ça devient asynchrone. C'està-dire que la fonction à « timer » (le terme technique est « différer ») est stockée quelque part en mémoire, mais le script repart aussitôt sur les instructions qui suivent, de manière synchrone.
Un petit exemple va éclaircir les choses :
Il est très (très) probable qu'un tour de while ait duré moins d'une seconde. Du coup, au 2e tour, on se retrouve avec un 2e appel asynchrone en attente.
Au final, on peut avoir des milliers, voire des dizaines de milliers d'appels en attente avant qu'une seconde se soit écoulée. T'imagines le bordel...
Par contre pour faire un appel périodique, tu peux utiliser setInterval :
opacity sera appelée toutes les secondes. Le problème c'est pour l'arrêter... Comme c'est asynchrone, le seul moyen de contrôler le moment où il faut l'arrêter c'est à l'intérieur même de cette fonction. Il faut stocker la valeur du timer quelque part. Je suggère une variable globale (même si ce n'est pas le moyen le plus élégant).
La fonction clearInterval utilisera le timer que tu as récupérer pour arrêter le machin.
J'espère que j'ai été assez clair ^^
je pense que tu fais une petite confusion entre les fonctions synchrones et asynchrones. Les termes semblent barbares mais en fait c'est assez simple : synchrone c'est ce qui se passe d'habitude, quand tu mets des instructions les unes après les autres.
Dès que tu utilises un setTimeout ou un setInterval, ça devient asynchrone. C'està-dire que la fonction à « timer » (le terme technique est « différer ») est stockée quelque part en mémoire, mais le script repart aussitôt sur les instructions qui suivent, de manière synchrone.
Un petit exemple va éclaircir les choses :
while (...) { x = 12; // ça c'est synchrone setTimeout(fonctionMachin, 1000); // fonctionMachin n'est pas appelée tout de suite ! y = 4; // on continue direct ici }; // et on repart dans le while aussi sec
Il est très (très) probable qu'un tour de while ait duré moins d'une seconde. Du coup, au 2e tour, on se retrouve avec un 2e appel asynchrone en attente.
Au final, on peut avoir des milliers, voire des dizaines de milliers d'appels en attente avant qu'une seconde se soit écoulée. T'imagines le bordel...
Par contre pour faire un appel périodique, tu peux utiliser setInterval :
setInterval(opacity, 1000);
opacity sera appelée toutes les secondes. Le problème c'est pour l'arrêter... Comme c'est asynchrone, le seul moyen de contrôler le moment où il faut l'arrêter c'est à l'intérieur même de cette fonction. Il faut stocker la valeur du timer quelque part. Je suggère une variable globale (même si ce n'est pas le moyen le plus élégant).
window.timer = setInterval(opacity, 1000);
La fonction clearInterval utilisera le timer que tu as récupérer pour arrêter le machin.
function opacity() { if (document.get... .opacity >= 1) { clearInterval(window.timer); } document.get... .opacity += 0.1; }
J'espère que j'ai été assez clair ^^
siniko44
Messages postés
172
Date d'inscription
vendredi 30 juillet 2010
Statut
Membre
Dernière intervention
29 novembre 2013
17
12 févr. 2011 à 17:51
12 févr. 2011 à 17:51
Merci beaucoup pour ta réponse ! :)
J'suis passé à autre chose depuis, mais ton message m'a fait comprendre quelques trucs ^^.
J'suis passé à autre chose depuis, mais ton message m'a fait comprendre quelques trucs ^^.