Maison >interface Web >js tutoriel >Construisez un compte à rebours en seulement 18 lignes de JavaScript
Construire un compte à rebours javascript est parfois nécessaire, qu'il s'agisse d'un événement, d'une promotion ou d'un jeu. Vous pouvez créer l'horloge à l'aide de JavaScript natif sans compter sur aucun plugins. Bien qu'il existe de nombreux excellents plugins d'horloge, l'utilisation de JavaScript native présente les avantages suivants:
Voici comment créer votre propre compte à rebours avec seulement 18 lignes de code JavaScript:
Pour acquérir une compréhension approfondie de JavaScript, veuillez lire notre livre "JavaScript: Novice to Ninja, 2nd Edition".
La création d'une horloge de base implique les étapes suivantes:
Tout d'abord, vous devez définir une date de fin valide. Cela devrait être une chaîne qui peut être comprise dans n'importe quel format en utilisant la méthode Date.parse()
de JavaScript. Par exemple:
Format ISO 8601:
<code class="language-javascript">const deadline = '2015-12-31';</code>
Format court:
<code class="language-javascript">const deadline = '31/12/2015';</code>
ou format long:
<code class="language-javascript">const deadline = 'December 31 2015';</code>
Chaque format vous permet de spécifier l'heure et le fuseau horaire exacts (ou spécifier le décalage de l'UTC dans le cas d'une date ISO). Par exemple:
<code class="language-javascript">const deadline = 'December 31 2015 23:59:59 GMT+0200';</code>
Vous pouvez en savoir plus sur le format de date JavaScript dans cet article.
L'étape suivante consiste à calculer le temps restant. Nous devons écrire une fonction qui accepte une chaîne représentant une heure de fin donnée (comme décrit ci-dessus). Nous calculons ensuite la différence entre cette heure et l'heure actuelle. Comme indiqué ci-dessous:
<code class="language-javascript">const deadline = '2015-12-31';</code>
Tout d'abord, nous créons une variable total
pour économiser le temps restant avant la date limite. La fonction Date.parse()
convertit une chaîne de temps en valeur en millisecondes. Cela nous permet de soustraire deux fois l'un de l'autre et d'obtenir le temps entre les deux.
<code class="language-javascript">const deadline = '31/12/2015';</code>
Maintenant, nous voulons convertir des millisecondes en jours, heures, minutes et secondes. Prenons des secondes comme exemple:
<code class="language-javascript">const deadline = 'December 31 2015';</code>
Décomposons ce qui se passe ici.
Math.floor( (t/1000) % 60 )
Sortir les données de l'horloge en tant qu'objet réutilisable
Cet objet vous permet d'appeler votre fonction et d'obtenir une valeur calculée. Voici un exemple de la façon d'obtenir les minutes restantes:
<code class="language-javascript">const deadline = 'December 31 2015 23:59:59 GMT+0200';</code>
est-ce pratique?
<code class="language-javascript">function getTimeRemaining(endtime){ const total = Date.parse(endtime) - Date.parse(new Date()); const seconds = Math.floor( (total/1000) % 60 ); const minutes = Math.floor( (total/1000/60) % 60 ); const hours = Math.floor( (total/(1000*60*60)) % 24 ); const days = Math.floor( total/(1000*60*60*24) ); return { total, days, hours, minutes, seconds }; }</code>
Affichez l'horloge et arrêtez-le lorsqu'il atteint zéro
Ensuite, nous écrivons une fonction qui publie des données d'horloge à notre nouveau div:
<code class="language-javascript">const total = Date.parse(endtime) - Date.parse(new Date());</code>
Cette fonction prend deux paramètres. Ils sont l'ID de l'élément qui contient notre horloge et l'heure de fin du compte à rebours. À l'intérieur de la fonction, nous déclarerons une variable
<code class="language-javascript">const seconds = Math.floor( (t/1000) % 60 );</code>et l'utiliserons pour stocker une référence à notre conteneur d'horloge Div. Cela signifie que nous n'avons pas à continuer d'interroger le DOM.
clock
Ensuite, nous exécuterons une fonction anonyme par seconde en utilisant
setInterval
Félicitations! Vous n'avez plus que 18 lignes de code JavaScript pour avoir une horloge de base.
<code class="language-javascript">return { total, days, hours, minutes, seconds };</code>
Préparez-vous à afficher votre horloge
Dans l'horloge, nous utilisons setInterval
pour mettre à jour l'affichage à chaque seconde. C'est OK dans la plupart des cas, mais au début, il y aura un deuxième retard. Pour supprimer ce retard, nous devons mettre à jour l'horloge une fois avant le début de l'intervalle.
déplacez la fonction anonyme transmise vers setInterval
dans sa propre fonction distincte. Nous pouvons nommer cette fonction updateClock
. Appelez la fonction setInterval
une fois à l'extérieur updateClock
et appelez-la à nouveau à l'intérieur setInterval
. De cette façon, l'horloge sera affichée sans délai.
Dans votre javascript, remplacez les éléments suivants:
<code class="language-javascript">const deadline = '2015-12-31';</code>
Utilisez les éléments suivants:
<code class="language-javascript">const deadline = '31/12/2015';</code>
Nous devons rendre les scripts d'horloge plus efficaces. Nous voulons mettre à jour uniquement les numéros dans l'horloge, plutôt que de reconstruire toute l'horloge à chaque seconde. Une façon de le faire est de mettre chaque numéro dans une balise <span></span>
et de mettre à jour uniquement les contenus <span></span>
.
c'est HTML:
<code class="language-javascript">const deadline = 'December 31 2015';</code>
Laissez maintenant une référence à ces éléments. Ajoutez le code suivant après la définition de la variable clock
<code class="language-javascript">const deadline = 'December 31 2015 23:59:59 GMT+0200';</code>
Ensuite, nous devons modifier la fonction updateClock
pour mettre à jour uniquement les nombres. Le nouveau code ressemblera à ceci:
<code class="language-javascript">function getTimeRemaining(endtime){ const total = Date.parse(endtime) - Date.parse(new Date()); const seconds = Math.floor( (total/1000) % 60 ); const minutes = Math.floor( (total/1000/60) % 60 ); const hours = Math.floor( (total/(1000*60*60)) % 24 ); const days = Math.floor( total/(1000*60*60*24) ); return { total, days, hours, minutes, seconds }; }</code>
Maintenant que l'horloge ne reconstruit plus chaque seconde, nous avons encore une chose à faire: ajouter des zéros de premier plan. Par exemple, l'horloge n'affiche pas 7 secondes, mais affiche 07 secondes. Un moyen facile consiste à ajouter une chaîne "0" au début du numéro, puis à couper les deux derniers chiffres.
Par exemple, pour ajouter des zéros principaux à la valeur "secondes", vous modifierez ce qui suit:
<code class="language-javascript">const total = Date.parse(endtime) - Date.parse(new Date());</code>
pour ceci:
<code class="language-javascript">const seconds = Math.floor( (t/1000) % 60 );</code>
Vous pouvez également ajouter des zéros principaux à des minutes et des heures si vous préférez. Si vous êtes venu si loin, félicitations! Votre horloge est maintenant disponible pour afficher.
Remarque: vous devrez peut-être cliquer sur "Rester" dans Codepen pour démarrer le compte à rebours.
L'exemple suivant montre comment évoluer l'horloge pour certains cas d'utilisation. Ils sont tous basés sur les exemples de base observés ci-dessus.
Supposons que nous voulions que l'horloge soit affichée certains jours et pas les autres jours. Par exemple, nous pouvons avoir une série d'événements à venir et ne voulons pas mettre à jour manuellement l'horloge à chaque fois. Voici comment organiser les choses à l'avance.
Masquez l'horloge en définissant la propriété display
de l'horloge à none
. Ajoutez ensuite ce qui suit à la fonction initializeClock
(après la ligne commençant par var clock
). Cela entraînera que l'horloge n'apparaît qu'après avoir appelé la fonction initializeClock
:
<code class="language-javascript">return { total, days, hours, minutes, seconds };</code>
Ensuite, nous pouvons spécifier la plage de dates que l'horloge doit afficher. Cela remplacera la variable deadline
:
<code class="language-javascript">const deadline = '2015-12-31';</code>
schedule
Chaque élément du tableau représente une date de début et une date de fin. Comme mentionné ci-dessus, les fuseaux horaires peuvent être inclus, mais j'utilise des dates normales ici pour garder le code lisible.
Enfin, lorsque l'utilisateur charge la page, nous devons vérifier si nous sommes dans une plage de temps spécifiée. Ce code doit remplacer l'appel précédent à la fonction initializeClock
.
<code class="language-javascript">const deadline = '31/12/2015';</code>
Maintenant, vous pouvez planifier l'horloge à l'avance sans le mettre à jour manuellement. Vous pouvez raccourcir le code au besoin. Pour la lisibilité, je fais mon code verbeux.
Il peut être nécessaire de définir un compte à rebours pendant un temps donné après l'arrivée de l'utilisateur ou démarre une tâche spécifique. Nous allons définir une minuterie de 10 minutes ici, mais vous pouvez utiliser le temps que vous souhaitez.
Nous avons juste besoin de remplacer la variable deadline
par ce qui suit:
<code class="language-javascript">const deadline = 'December 31 2015';</code>
Ce code obtient l'heure actuelle et ajoute dix minutes. Les valeurs sont converties en millisecondes, de sorte qu'elles peuvent être additionnées et converties en une nouvelle échéance.
Maintenant, nous avons une horloge qui compte dix minutes à partir du moment où l'utilisateur arrive. N'hésitez pas à essayer différentes durées.
Parfois, il est nécessaire de sauvegarder l'état de l'horloge, pas seulement la page actuelle. Si nous voulons définir un minuteur de 10 minutes sur l'ensemble du site Web, nous ne voulons pas qu'il se réinitialise lorsque l'utilisateur se rend sur une autre page.
Une solution consiste à enregistrer l'heure de fin de l'horloge dans le cookie. De cette façon, la navigation vers la nouvelle page ne réinitialise pas l'heure de fin à dix minutes.
C'est la logique:
pour y parvenir, remplacez la variable deadline
par ce qui suit:
<code class="language-javascript">const deadline = 'December 31 2015 23:59:59 GMT+0200';</code>
Ce code utilise des cookies et des expressions régulières, qui sont toutes deux des sujets distincts. Par conséquent, je ne vais pas entrer dans les détails ici. Une chose à noter est que vous devez changer .yourdomain.com
en votre nom de domaine réel.
La date et l'heure JavaScript sont tirées de l'ordinateur de l'utilisateur. Cela signifie que les utilisateurs peuvent affecter l'horloge JavaScript en modifiant le temps sur leur ordinateur. Dans la plupart des cas, cela n'a pas d'importance. Mais dans certaines situations extrêmement sensibles, le temps doit être obtenu à partir du serveur. Cela peut être fait avec du PHP ou de l'Ajax, ce qui dépasse le cadre de ce tutoriel.
Après avoir obtenu le temps du serveur, nous pouvons utiliser les mêmes techniques dans ce tutoriel pour le gérer.
Après avoir terminé les exemples de cet article, vous savez maintenant comment créer votre propre compte à rebours avec juste une petite quantité de code JavaScript natif! Nous avons appris à faire un compte à rebours de base et à l'afficher efficacement. Nous avons également couvert certaines fonctionnalités supplémentaires utiles, notamment la planification, le temps absolu et relatif, et l'utilisation de cookies pour enregistrer l'état entre l'accès à la page et au site Web.
Essayez d'utiliser votre code d'horloge. Essayez d'ajouter des styles créatifs ou de nouvelles fonctionnalités (telles que les boutons Pause et restauration). Après cela, si vous souhaitez partager des exemples d'horloge cool, faites-le nous savoir dans le forum.
Comment obtenir la date et l'heure actuelles en JavaScript? Vous pouvez utiliser l'objet Date
pour obtenir la date et l'heure actuelles. Créez simplement une nouvelle instance de Date
sans paramètres, qui représentera la date et l'heure actuelles.
Quelles sont les opérations de date et d'heure communes en JavaScript? Les opérations communes incluent les dates de mise en forme, l'analyse des chaînes de date, le calcul des intervalles de temps, l'ajout ou la soustraction du temps et la comparaison des dates.
Quelle est la façon recommandée de gérer les fuseaux horaires en JavaScript? Il est préférable d'utiliser le temps UTC autant que possible pour éviter les problèmes de fuseau horaire. Lorsque vous affichez du temps à l'utilisateur, envisagez d'utiliser la méthode toLocaleString
et de l'utilisation de l'option timeZone
pour spécifier le fuseau horaire souhaité.
Comment calculer la différence entre deux dates en JavaScript? Vous pouvez soustraire deux objets Date
pour obtenir des intervalles de temps en millisecondes et les convertir en jours, heures, minutes, etc. en utilisant des opérations mathématiques.
Puis-je facilement manipuler les dates en javascript? Oui, JavaScript fournit quelques façons d'ajouter et de soustraire les intervalles de temps aux dates. L'objet Date
a des méthodes telles que setFullYear
, setMonth
, setDate
, etc., qui sont utilisées pour les opérations de date.
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!