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 :

Double compte à rebours


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Double compte à rebours
    Bonjour à tous,

    Je débute en Javascript et j'ai souhaité créer un compte à rebours pour une vente privée. Voici le principe de mon compte à rebours:

    On définit la date d'ouverture de la vente. Lorsque le compteur arrive à la fin, un autre compteur se lance, celui du temps qu'il reste pour profiter de la vente. Jusque là, ça marche, le souci, c'est que lorsque le second compteur se termine, j'aimerais qu'il reste à 0, et que le message de statut "Vente terminée" apparaisse à côté.

    Sauf que dans le cas actuel, le compteur passe dans le négatif. Je débute, et je ne trouve pas le souci !

    Merci pour votre aide, voici mon code:

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    			<script>
    				var cible = new Date('June 18, 2011 07:00:00');
    				var time = parseInt(cible.getTime() / 1000, 10);
    				var text = "Ouverture de la vente dans: ";
     
    				var img_vp = '<img src="ressources/vp/vp_majirel.jpg"/><br/>';
     
    				//Temps avant ouverture de la vente
    				function decompte()
    				{
    					var aujourdhui = new Date();
    					time_tmp = parseInt(aujourdhui.getTime() / 1000, 10);
    					restant = time - time_tmp;
     
    					jour = parseInt((restant / (60 * 60 * 24)), 10);
    					heure = parseInt((restant / (60 * 60) - jour * 24), 10);
    					minute = parseInt((restant / 60 - jour * 24 * 60 - heure * 60), 10);
    					seconde = parseInt((restant - jour * 24 * 60 * 60 - heure * 60 * 60 - minute * 60), 10);
     
    					document.getElementById('jours').innerHTML = jour;
    					document.getElementById('heures').innerHTML  = heure;
    					document.getElementById('minutes').innerHTML  = minute;
    					document.getElementById('secondes').innerHTML = seconde;
    					document.getElementById('text').innerHTML = text;
    					document.getElementById('img_vp').innerHTML = img_vp;		
     
    					if (time_tmp < time)
    						setTimeout('decompte()', 1000);
    					else
    					{
    						// Temps restant avant fermeture de la vente
     
    						//Activation du bandeau de la vente privée
    						img_vp = '<a href="#"><img src="ressources/vp/vp_majirel.jpg"/></a><br/>';
    						document.getElementById('img_vp').innerHTML = img_vp;	
    						text = "Il vous reste: "
    						document.getElementById('text').innerHTML = text;
     
    						cible = new Date('June 20, 2011 00:00:00');
    						time = parseInt(cible.getTime() / 1000, 10);
     
    						function decompte()
    						{
    							aujourdhui = new Date();
    							time_tmp = parseInt(aujourdhui.getTime() / 1000, 10);
    							restant = time - time_tmp;
     
    							jour = parseInt((restant / (60 * 60 * 24)), 10);
    							heure = parseInt((restant / (60 * 60) - jour * 24), 10);
    							minute = parseInt((restant / 60 - jour * 24 * 60 - heure * 60), 10);
    							seconde = parseInt((restant - jour * 24 * 60 * 60 - heure * 60 * 60 - minute * 60), 10);
     
    							//ne prend pas à compte 
    							if (time_tmp < time)
    								setTimeout('decompte()', 1000);
    							else
    							{
     
    								// Temps fini, on fait ce qu'on veut
    								document.getElementById('jours').innerHTML = 0;
    								document.getElementById('heures').innerHTML  = 0;
    								document.getElementById('minutes').innerHTML  = 0;
    								document.getElementById('secondes').innerHTML = 0;
     
    								var statut = '- Vente privée terminée';
     
    								document.getElementById('statut').innerHTML = statut;
    							}
    						}
    						setTimeout('decompte()', 500);
     
    					}
    				}
    				setTimeout('decompte()', 500);
     
    				</script>
    				<span id="img_vp"></span>
    				<span style="color:#e11076;font-weight:bold;font-family:Calibri, Arial, sans-serif;">
    				<span id="text"></span>
    				<span id="jours"></span> jour(s)
    				<span id="heures"></span> h
    				<span id="minutes"></span> min
    				<span id="secondes"></span> s
     
    				<span id="statut"></span>
    				</span>

  2. #2
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Bonjour,

    Il faut nettoyer le timer. Lancez-le de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //variable globale
    var mon_timer;
    et lors des appels :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mon_timer = setTimeout('decompte()', 500);
    Et lorsqu'il est à zéro, nettoyez-le ainsi :


  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci beaucoup pour cette réponse rapide =)

    J'ai essayé d'insérer ce que vous m'avez dit, mais comme je débute, j'ai dû mal le faire, et du coup, cela ne fonctionne pas. Je ne comprends pas les lignes où je dois corriger.

    Par ailleurs, je ne sais pas si c'est lié, mais il semblerait que les lignes situées entre la ligne 54 et 69 ne soient pas prises en compte

  4. #4
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Vous êtes sûr de vos calculs ? Mettez une alert dans le else pour vérifier qu'il passe bien dedans.

    Affichez également la valeur de "resta...

    Oubliez ce que j'ai dit. Vous avez défini une fonction decompte dans la fonction decompte. Ce n'est pas une syntaxe Javascript.

    Il faudrait peut-être que vous relisiez quelques tutoriels pour modifier votre code correctement.

    Courage.

  5. #5
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Citation Envoyé par newbee13 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    							}
    						}
    						setTimeout('decompte()', 500);
     
    					}
    				}
    				setTimeout('decompte()', 500);
    Oula... *hic* santé les gars !

  6. #6
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Citation Envoyé par RomainVALERI Voir le message
    Oula... *hic* santé les gars !
    Je vois pas le rapport…

    D'ailleurs :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function bidule() {
       console.info('x');
       function bidule() {
          console.info('y');
       }
       bidule();
    }
     
    bidule();
    Ça marche, et ça ne boucle pas ! Il y a deux fonctions bidule différentes car pas dans la même portée.

    Sinon j'ai quelques remarques qui vont peut-être faire avancer les choses, ou pas.
    – J'utiliserais plutôt Math.floor au lieu de parseInt, c'est plus lisible

    – Je remplacerais les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout('decompte()', 500)
    par des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setTimeout(decompte, 500)
    c'est la syntaxe standard, et puis on économise une analyse de chaîne.

    – Quand on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    restant = time - timestamp
    si time < timestamp, alors restant < 0 et réciproquement. C'est bien de l'avoir en tête, et en l'occurence on voit tout de suite quand il faut s'arrêter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function decompte()
    {
    aujourdhui = new Date();
       time_tmp = parseInt(aujourdhui.getTime() / 1000, 10);
       restant = time - time_tmp;
    
       if (restant > 0) {
          jour = parseInt((restant / (60 * 60 * 24)), 10);
          heure = ...
    – Déclare tes variables avec var si tu ne veux pas qu'elles soient globales.

    – Enfin, mais ça ne tient qu'à moi, plutôt que multiplier les <span>, je construirais une chaîne entièrement dans le script et l'ajouterais seulement à la fin quand elle est complète.


Discussions similaires

  1. Compte à rebours
    Par Anduriel dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 29/12/2005, 20h12
  2. compte à rebours
    Par Datord dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 17/11/2005, 21h22
  3. compte à rebours
    Par etoile1506 dans le forum C
    Réponses: 10
    Dernier message: 27/10/2005, 15h20
  4. Compte à rebours trop rapide
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/06/2005, 20h57

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