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 :

Compte à rebours


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Par défaut Compte à rebours
    Bonsoir,

    J'essai d'insérer un compte à rebours dans ma page web comme suit:

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <body>
    	<div id="countdown">
    	    <strong>Remaining time</strong> :
    	    <span id="countdown_day" >05</span> jours
    	    <span id="countdown_hour">11</span> heures
    	    <span id="countdown_min" >50</span> minutes
    	    <span id="countdown_sec" >22</span> secondes
    	</div>
    </body>

    et voici le javascript que j'ai inséré dans la même page:
    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
    countdownManager = {
        // Configuration
        targetTime: new Date('2012-11-05 00:00:00'), // Date cible du compte à rebours (00:00:00)
        displayElement: { // Elements HTML où sont affichés les informations
            day:  null,
            hour: null,
            min:  null,
            sec:  null
        },
        // Initialisation du compte à rebours (à appeler 1 fois au chargement de la page)
        init: function(){
            // Récupération des références vers les éléments pour l'affichage
            // La référence n'est récupérée qu'une seule fois à l'initialisation pour optimiser les performances
            this.displayElement.day  = jQuery('#countdown_day');
            this.displayElement.hour = jQuery('#countdown_hour');
            this.displayElement.min  = jQuery('#countdown_min');
            this.displayElement.sec  = jQuery('#countdown_sec');
            // Lancement du compte à rebours
            this.tick(); // Premier tick tout de suite
            window.setInterval("countdownManager.tick();", 1000); // Ticks suivant, répété toutes les secondes (1000 ms)
        },
        // Met à jour le compte à rebours (tic d'horloge)
        tick: function(){
            // Instant présent
            var timeNow  = new Date();
            // On s'assure que le temps restant ne soit jamais négatif (ce qui est le cas dans le futur de targetTime)
            if( timeNow > this.targetTime ){
                timeNow = this.targetTime;
            }
            // Calcul du temps restant
            var diff = this.dateDiff(timeNow, this.targetTime);
            this.displayElement.day.text(  diff.day  );
            this.displayElement.hour.text( diff.hour );
            this.displayElement.min.text(  diff.min  );
            this.displayElement.sec.text(  diff.sec  );
        },
        // Calcul la différence entre 2 dates, en jour/heure/minute/seconde
        dateDiff: function(date1, date2){
            var diff = {}                           // Initialisation du retour
            var tmp = date2 - date1;
            tmp = Math.floor(tmp/1000);             // Nombre de secondes entre les 2 dates
            diff.sec = tmp % 60;                    // Extraction du nombre de secondes
            tmp = Math.floor((tmp-diff.sec)/60);    // Nombre de minutes (partie entière)
            diff.min = tmp % 60;                    // Extraction du nombre de minutes
            tmp = Math.floor((tmp-diff.min)/60);    // Nombre d'heures (entières)
            diff.hour = tmp % 24;                   // Extraction du nombre d'heures
            tmp = Math.floor((tmp-diff.hour)/24);   // Nombre de jours restants
            diff.day = tmp;
            return diff;
        }
    };
    jQuery(function($){
        // Lancement du compte à rebours au chargement de la page
        countdownManager.init();
    });
    Le problème c'est que la date reste inerte dans la page (05 jours 11 heures 50 minutes 22 secondes), je n'ai pas compris c'est quoi l'erreur?

    Pourquoi le compte à rebours ne se met pas à decrémenter?
    Remarque: J'ai déja fait appel au fichier jquery-1.10.1.js

    Merci d'avance

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Mmmmh... m'étonnerait fortement que le setInterval avec des guillemets double fonctionne.

    Essaye plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setTimeout(function(){countdownManager.tick();},1000);

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Par défaut
    Bonjour,

    Merci pour la réponse mais en se référant à ce que l'on trouve, on peut mettre le setInterval avec des guillemets double!

    Ca ne marche toujours pas.

    Cordialement.

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Euh... en fait ton script marche très bien, c'est juste que tu as mis la date cible en 2012, donc il peut pas décrémenter vu que la date est déjà passée... J'ai testé, ça marche très bien avec une date dans le futur

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Par défaut
    Ca ne marche toujours pas chez moi malgré que j'ai changé la date cible!

    Pouvez vous m'envoyer le code dont vous avez testé?

    Merci

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    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
     
    <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
    <script>
        countdownManager = {
            // Configuration
            targetTime: new Date('2015-1-05 00:00:00'), // Date cible du compte à rebours (00:00:00)
            displayElement: {// Elements HTML où sont affichés les informations
                day: null,
                hour: null,
                min: null,
                sec: null
            },
            // Initialisation du compte à rebours (à appeler 1 fois au chargement de la page)
            init: function() {
                // Récupération des références vers les éléments pour l'affichage
                // La référence n'est récupérée qu'une seule fois à l'initialisation pour optimiser les performances
                this.displayElement.day = jQuery('#countdown_day');
                this.displayElement.hour = jQuery('#countdown_hour');
                this.displayElement.min = jQuery('#countdown_min');
                this.displayElement.sec = jQuery('#countdown_sec');
     
                // Lancement du compte à rebours
                this.tick(); // Premier tick tout de suite
                window.setInterval("countdownManager.tick();", 1000); // Ticks suivant, répété toutes les secondes (1000 ms)
            },
            // Met à jour le compte à rebours (tic d'horloge)
            tick: function() {
                // Instant présent
                var timeNow = new Date();
     
                // On s'assure que le temps restant ne soit jamais négatif (ce qui est le cas dans le futur de targetTime)
                if (timeNow > this.targetTime) {
                    timeNow = this.targetTime;
                }
     
                // Calcul du temps restant
                var diff = this.dateDiff(timeNow, this.targetTime);
     
                this.displayElement.day.text(diff.day);
                this.displayElement.hour.text(diff.hour);
                this.displayElement.min.text(diff.min);
                this.displayElement.sec.text(diff.sec);
            },
            // Calcul la différence entre 2 dates, en jour/heure/minute/seconde
            dateDiff: function(date1, date2) {
                var diff = {}                           // Initialisation du retour
                var tmp = date2 - date1;
     
                tmp = Math.floor(tmp / 1000);             // Nombre de secondes entre les 2 dates
                diff.sec = tmp % 60;                    // Extraction du nombre de secondes
                tmp = Math.floor((tmp - diff.sec) / 60);    // Nombre de minutes (partie entière)
                diff.min = tmp % 60;                    // Extraction du nombre de minutes
                tmp = Math.floor((tmp - diff.min) / 60);    // Nombre d'heures (entières)
                diff.hour = tmp % 24;                   // Extraction du nombre d'heures
                tmp = Math.floor((tmp - diff.hour) / 24);   // Nombre de jours restants
                diff.day = tmp;
     
                return diff;
            }
        };
     
        jQuery(function($) {
            // Lancement du compte à rebours au chargement de la page
            countdownManager.init();
        });
     
    </script>
     
    <body>
     
        <div id="countdown">
            <strong>Remaining time</strong> :
            <span id="countdown_day" >05</span> jours
            <span id="countdown_hour">11</span> heures
            <span id="countdown_min" >50</span> minutes
            <span id="countdown_sec" >22</span> secondes
        </div>
     
    </body>
    Tout ce que je peux supposer c'est que ton appel à ton fichier jquery est incorrect. Regarde ta console js (touche F12 sous chrome et IE, extension firebug sous firefox)

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Par défaut
    J'ai essayé votre code, mais ça m'affiche :

    Remaining time : NaN jours NaN heures NaN minutes NaN secondes

    Mêm j'ai fait l'appel du jQuery comme le votre!

  8. #8
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Par défaut
    Bizarre, le code fonctionne avec Chrome mais ne marche pas avec Firefox!!!

  9. #9
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    En effet, je testais sous chrome ^^

    J'ai trouvé ce qui n'allait pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     targetTime: new Date('2015-04-05'),
    Pas d'heure ni de minute, et le jour et le mois sur deux chiffres ("04" et non "4").

  10. #10
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Par défaut
    Merci beaucoup,

    Juste deux dernières questions:

    1- Comment je réinitialise le compte à rebours à chaque fois que j'accède à la page, parceque là quand je ferme la page et je l'ouvre de nouveau, le compteur continue à se decrémenter depuis la dernière fermeture.

    2- Si je veux passer un paramètre pour déterminer la date cible d'une manière automatique, c'est à dire je ne veux pas mettre la valeur "2015-04-05" directement d'une façon statique dans le code. Comment je pourrai le faire?

    Merci une fois

  11. #11
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    1- Comment je réinitialise le compte à rebours à chaque fois que j'accède à la page, parceque là quand je ferme la page et je l'ouvre de nouveau, le compteur continue à se decrémenter depuis la dernière fermeture.
    Etant donné qu'il repart à chaque "tick" à partir de la date actuelle, je vois pas trop comment c'est possible... (javascript ne garde rien en mémoire à la fermeture de la page).

    2- Si je veux passer un paramètre pour déterminer la date cible d'une manière automatique, c'est à dire je ne veux pas mettre la valeur "2015-04-05" directement d'une façon statique dans le code. Comment je pourrai le faire?
    Absolument comme tu veux, tout ce qu'il faut c'est que tu passes en paramètre de la fonction "new Date" une chaîne de caractère formatée de la même manière que celle-ci (c'est à dire YYYY-MM-DD).

Discussions similaires

  1. [timer] Compte à rebours pour redirection !
    Par Raideman dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/12/2005, 20h07
  2. Compte à rebours
    Par Anduriel dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 29/12/2005, 20h12
  3. compte à rebours
    Par Datord dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 17/11/2005, 21h22
  4. compte à rebours
    Par etoile1506 dans le forum C
    Réponses: 10
    Dernier message: 27/10/2005, 15h20
  5. 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