IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

timer Event ne boucle pas


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 34
    Par défaut timer Event ne boucle pas
    Bonjour à tout le monde,

    Voila je vous explique vite fait mon problème. J'ai créé un timer qui donne le temps avant apparition d'un événement récurant dans la journée (ici des world boss dans un MMO).
    Voila le code de mon Timer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <!DOCTYPE html>
    <html>
    <body>
    <p id="wbtime" align="center"></p>
     
    <script>
    var myVar=setInterval(function(){EventCD()},10000);
     
    function EventCD(EventInit, Recur) {
     
    		var rec = Recur;
    		var einit = EventInit;
    		var date = new Date;
            var h = date.getHours();
            var m = date.getMinutes();
            var Hcour = (h * 60) + m;
    		//var Affichage = "";
     
    		while (Hcour > (einit + 15)) {
    			einit = einit + rec;
    		}
    		if (Hcour < einit) {
    			Timeto = einit - Hcour;
    			HeureCD = parseInt(Timeto / 60);
    			MinCD = (Timeto - (HeureCD * 60) - 1);
    			// Affichage = ;
    			return "Temps avant apparition "+ HeureCD +" H "+ MinCD +" min";			
    		}
    		else {
    		return "En cours...";
    		}
    }
    document.getElementById("wbtime").innerHTML = EventCD(0, 180);
    </script>
     
    </body>
    </html>
    Le temps est affiché correctement, mais ne se rafraichi pas sauf si je refresh la page.

    En fouillant un peu sur le forum, j'ai trouvé un post (https://www.google.fr/url?sa=t&rct=j...b-stOj8aRT4UlQ) qui traite d'un problème similaire.

    J'ai essayé d'adapter ce code au mien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <!DOCTYPE html>
    <html>
    <head>
     
    <script  type="text/javascript">
    //var myVar=setInterval(function(){EventCD()},10000);
     
    function EventCD() {
     
    		var rec = 120;
    		var einit = 105;
    		var date = new Date;
            var h = date.getHours();
            var m = date.getMinutes();
            var Hcour = (h * 60) + m;
    		var Affichage = "";
     
    		while (Hcour > (einit + 15)) {
    			einit = einit + rec;
    		}
    		if (Hcour < einit) {
    			Timeto = einit - Hcour;
    			HeureCD = parseInt(Timeto / 60);
    			MinCD = (Timeto - (HeureCD * 60) - 1);
    			Affichage = "Temps avant apparition "+ HeureCD +" H "+ MinCD +" min";
    		}
    		else {
    		Affichage = "En cours...";
    		}
    		timerID = setTimeout(EventCD,1000);
    }
    document.getElementById("wbtime").innerHTML = Affichage;
    </script>
     
    <body onload="EventCD()">
    <p id="wbtime" align="center"></p>
     
    </body>
    </html>
    Et la rien ne s'affiche.

    Etant vraiment novice, je ne vois pas ce qui cloche. De plus je maîtrise très mal la fonction document.getElementById("wbtime").innerHTML

    Merci par avance pour toute l'aide que vous pourrez m'apporter.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    Tu ne lui passes pas de paramètres dans le setInterval ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 34
    Par défaut
    Si je rajoute (EventInit, Recur) au Setinterval, cela ne change rien au rafraichissement, par contre cela m'affiche cet erreur dans la console de chrome :

    Uncaught ReferenceError: EventInit is not defined
    (anonymous function)

    par contre je viens de voir que la boucle semble fonctionner, car cela me rajoute cette erreur toutes les secondes, ca avance !!!!

    Je ne comprends pas pourquoi cela ne me met pas a jour le texte avec la bonne heure.

    En tout cas merci de ta réponse rapide je ne m'y attendait pas

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    C'est effectivement un bug assez connu de JavaScript qui oblige, pour une raison inconnue à ce jour, que les paramètres que tu transmets à une fonction correspondent à quelque chose...

    Un peu comme si, quand tu parles à quelqu'un, il faudrait que les mots que tu prononce veuillent dire quelque chose.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 34
    Par défaut
    Bon j'ai défini directement les valeur de rec et einit dans la fonction, j'ai changé ma ligne setinterval en fonction, ainsi que la ligne function et là je n'ai plus l'erreur dans la console mais l'affichage ne se mets toujours pas à jour.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 34
    Par défaut
    Bon un autre petit point. Je viens de m'appercevoir d'un bug dans le timer (un autre) :

    quand s = 0, il m'affiche : Temps avant apparition 0 H 10 min 60 s

    Pour corriger ça j'ai modifié mon script :

    Avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		if (Hcour < einit) {
    			Timeto = einit - Hcour;
    			HeureCD = parseInt(Timeto / 60);
    			MinCD = (Timeto - (HeureCD * 60) - 1);
    			SecCD = 60 - s
    			// Affichage = ;
    			return "Temps avant apparition "+ HeureCD +" H "+ MinCD +" min "+ SecCD +" s";			
    		}
    Après :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (Hcour < einit) {
    			Timeto = einit - Hcour;
    			HeureCD = parseInt(Timeto / 60);
    			if (s = 0) {
    				SecCD = 0;
    				MinCD = (Timeto - (HeureCD * 60));
    			}
    			else {
    				MinCD = (Timeto - (HeureCD * 60) - 1);
    				SecCD = 60 - s;
    			}
    			Affichage = "Temps avant apparition "+ HeureCD +" H "+ MinCD +" min "+ SecCD +" s";		
    		}
    Maintenant il m'affiche en permanence : 60s à la fin et ce quelque soit la valeur de s
    je ne vois pas mon erreur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] une boucle qui ne boucle pas
    Par taly dans le forum Langage
    Réponses: 9
    Dernier message: 19/09/2006, 17h25
  2. [Tableaux] Boucle pas prise en compte
    Par Anduriel dans le forum Langage
    Réponses: 5
    Dernier message: 27/08/2006, 16h31
  3. event.target marche pas avec les images
    Par tuxout dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 18/08/2006, 17h46
  4. [Tableaux] boucle while qui ne boucle pas comme je veux
    Par oceane751 dans le forum Langage
    Réponses: 5
    Dernier message: 05/06/2006, 00h42
  5. Réponses: 2
    Dernier message: 13/05/2006, 13h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo