Comment créer une animation d'horloge à l'aide de Canvas
En passant en revue les points de connaissances de Javascript à Canvas, j'ai vu un exemple d'horloge statique dessinée à l'aide de Canvas et j'ai voulu la transformer en une animation d'horloge qui affiche dynamiquement l'heure du système. De plus, couplé à une horloge à affichage numérique, un petit module horloge était né ! L'interface actuelle est encore relativement grossière, avec seulement une interface simple et des effets d'animation.
Cette horloge comprend deux parties, l'horloge à disque animé et l'horloge numérique. La première consiste à utiliser le délai d'attente pour appeler la méthode setTimeout() afin de créer un effet d'animation en boucle pour afficher l'heure. Examinons d'abord le code de l'horloge numérique. Il est relativement simple. L'horloge à disque est également conçue pour imiter l'horloge numérique.
var ntimeoutId = setTimeout(ntimeOut,0);function ntimeOut() { clearTimeout(ntimeoutId); var now = new Date(); var hours = now.getHours().toString(), minutes = now.getMinutes().toString(), seconds = now.getSeconds().toString(); var time = hours+" : "+minutes+" : "+seconds; var timep = document.getElementById("time"); timep.innerHTML = time; ntimeoutId = setTimeout(ntimeOut, 1000); }
1. Tout d'abord, définissez un appel de délai d'attente pour appeler la méthode pour la première fois afin d'afficher l'heure actuelle du système. La raison pour laquelle l'heure est réglée. Il est 0 pour afficher l'heure sans délai.
2. Effacez l'appel de délai d'attente précédent avant chaque boucle (pourquoi devez-vous faire cela, je ne sais pas encore ??? Cela peut être lié aux performances de la mémoire, commenté Le programme peut être exécuté normalement à l'avenir.)
3. Obtenez l'heure actuelle du système et enregistrez-la dans un certain format de chaîne.
4. Afin de l'afficher dynamiquement sur la page, un élément p vide est défini dans la page Html pour stocker la chaîne temporelle. Utilisez la manipulation DOM pour l'ajouter à l'élément p afin de l'afficher dynamiquement.
5. En bouclant continuellement l'appel de délai d'attente, l'horloge numérique peut être affichée de manière dynamique et les changements dynamiques dans l'élément p peuvent également être vus via les outils de développement.
L'étape suivante consiste à créer une animation d'horloge de disque. La caractérisation du disque et de la valeur numérique est relativement simple. Méthode arc() et contexte Utilisez simplement la méthode .fillText(). Voici son code source :
context.beginPath(); context.restore(); context.translate(0,0); context.clearRect(0,0,300,300); //绘制时钟内外边框 context.arc(150,150,149,0,2 * Math.PI,false); context.moveTo(295,150); context.arc(150,150,145,0,2 * Math.PI,false); context.font = "bold 18px Arial"; context.textAlign = "center"; //绘制时钟表盘数值 context.fillText("12",150,25); context.fillText("3",285,150); context.fillText("6",150,290); context.fillText("9",15,150); context.fillText("1",215,45); context.fillText("2",265,95); context.fillText("4",265,225); context.fillText("7",95,275); context.fillText("5",215,275); context.fillText("8",35,225); context.fillText("10",35,95); context.fillText("11",75,45); context.stroke(); context.closePath();
L'étape suivante consiste à dessiner le pointeur. Lorsque vous dessinez le pointeur, reportez-vous à. la méthode en élévation. , il sera beaucoup plus pratique d'utiliser la méthode d'opération de transformation context.translate() pour changer l'origine, puis dessiner le chemin comme pointeur. Une autre difficulté du dessin de pointeurs est le calcul des radians. Bien entendu, il s’agit d’un problème mathématique. Regardons d'abord le code source :
//绘制指针 context.save(); context.translate(150,150); //时针 context.moveTo(0,0); hour(hours); function hour(thour) { context.save(); var newhour = 0; if(thour>12) { newhour = thour-12; } else { newhour = thour; } context.rotate((2*Math.PI/12)*newhour); context.lineTo(0,-80); context.restore(); } //分针 context.moveTo(0,0); minute(minutes); function minute(tminute) { context.save(); context.rotate((2*Math.PI/12)*tminute/5); context.lineTo(0,-110); context.restore(); } //秒针 context.moveTo(0,0); second(seconds); function second(tsecond) { context.save(); context.fillStyle = "#fff"; context.rotate((2*Math.PI/12)*tsecond/5); context.lineTo(0,-120); context.restore(); } context.stroke();
Dans le dessin de pointeurs, chaque type de pointeur utilise une fonction pour modifier l'arc de chaque pointeur dessin. Pour obtenir l’effet d’animation de la rotation du pointeur. Pour l'aiguille des heures, convertissez l'horloge de vingt-quatre heures en horloge de douze heures et faites-la pivoter de 30° à chaque fois. L'aiguille des minutes et l'aiguille des secondes tournent de 0 à 11. Je crois que tout le monde est meilleur que moi pour les problèmes mathématiques simples. J'avais encore du mal pendant un moment. La méthode context.save() et la méthode context.restore() sont utilisées dans chaque fonction pour enregistrer et restaurer le chemin lors de l'initialisation, sinon le pointeur déraillera.
Tout le travail est pratiquement prêt. Il ne nous reste plus qu'à placer le cadran et les aiguilles de l'horloge dans l'appel de délai d'attente. Cependant, il reste encore certains problèmes qui nécessitent une attention particulière, comme le. Le cadran et les aiguilles de l'horloge sont différents, veillez donc à utiliser la sauvegarde et la restauration pour restaurer le chemin lors de l'initialisation, sinon le cadran et les aiguilles de l'horloge dérailleront. Une autre chose à noter est que lorsque vous utilisez Canvas pour créer des animations, chaque cycle d'animation doit effacer le canevas et le redessiner, sinon le pointeur continuera à tourner et se transformera en fleur.
Le code complet de l'horloge du disque est le suivant :
//显示指针时间var drawing = document.getElementById("drawing");if(drawing.getContext) { var context = drawing.getContext("2d"); var rtimeoutId = setTimeout(roudClock,0); function roudClock() { clearTimeout(rtimeoutId); context.beginPath(); context.restore(); context.translate(0,0); context.clearRect(0,0,300,300); //绘制时钟内外边框 context.arc(150,150,149,0,2 * Math.PI,false); context.moveTo(295,150); context.arc(150,150,145,0,2 * Math.PI,false); context.font = "bold 18px Arial"; context.textAlign = "center"; //绘制时钟表盘数值 context.fillText("12",150,25); context.fillText("3",285,150); context.fillText("6",150,290); context.fillText("9",15,150); context.fillText("1",215,45); context.fillText("2",265,95); context.fillText("4",265,225); context.fillText("7",95,275); context.fillText("5",215,275); context.fillText("8",35,225); context.fillText("10",35,95); context.fillText("11",75,45); context.stroke(); context.closePath(); var now = new Date(); var hours = now.getHours(), minutes = now.getMinutes(), seconds = now.getSeconds(); //绘制指针 context.save(); context.translate(150,150); //时针 context.moveTo(0,0); hour(hours); function hour(thour) { context.save(); var newhour = 0; if(thour>12) { newhour = thour-12; } else { newhour = thour; } context.rotate((2*Math.PI/12)*newhour); context.lineTo(0,-80); context.restore(); } //分针 context.moveTo(0,0); minute(minutes); function minute(tminute) { context.save(); context.rotate((2*Math.PI/12)*tminute/5); context.lineTo(0,-110); context.restore(); } //秒针 context.moveTo(0,0); second(seconds); function second(tsecond) { context.save(); context.fillStyle = "#fff"; context.rotate((2*Math.PI/12)*tsecond/5); context.lineTo(0,-120); context.restore(); } context.stroke(); context.restore(); context.translate(0,0); context.save(); rtimeoutId = setTimeout(roudClock,1000); } }
Enfin, je résume ceci time Plusieurs problèmes rencontrés lors de la pratique de la démo :
1. Problème de redessinage du canevas
Lorsque l'animation du pointeur boucle, il n'y a aucun moyen d'effacer le chemin précédent, ce qui fait que chaque boucle laisse une marque. J'ai essayé d'utiliser la méthode clearRect() dans une petite plage, mais j'ai constaté qu'elle ne pouvait effacer que le contenu du cadran et des chiffres dans la plage, et que le pointeur laissait toujours des traces. Plus tard, grâce à la recherche, la réponse que j'ai obtenue est que lorsque vous utilisez Canvas pour créer des animations, vous devez le redessiner. Le contenu du canevas doit être effacé avant de dessiner un nouveau contenu, et chaque modification d'animation doit être effacée. Pour la méthode redraw, veuillez vous référer au lien. J'utilise la méthode clearRect() pour effacer l'intégralité du canevas.
2. Utilisation de la méthode save() et de la méthode restaurer()
Parce que les paramètres d'origine de mon cadran d'horloge et de mon pointeur sont différents, Par conséquent, après le redessinage, l'origine du cadran de l'horloge deviendra l'origine du pointeur, donc les méthodes save() et restaurer() doivent être utilisées pour la modifier. En plus de cet endroit, il existe également d'autres endroits qui doivent être utilisés. Il convient aux situations dans lesquelles les paramètres sont modifiés après l'opération, mais les paramètres d'origine doivent être utilisés pour les opérations ultérieures. Notez que ces deux méthodes enregistreront et restaureront uniquement les paramètres, pas le contenu.
3. Utilisation de la méthode Translate()
La méthode Translate() appartient à l'opération de transformation et peut changer l'origine du canevas . La valeur par défaut L'origine du canevas se trouve dans le coin supérieur gauche du canevas. L'utilisation de cette méthode facilite le tracé du chemin du pointeur. Bien sûr, il existe d'autres utilisations que je n'ai pas encore abordées.
4. Utilisation de la méthode setTimeout()
L'utilisation d'appels avec délai d'attente est une meilleure méthode que les appels intermittents. L'utilisation d'appels avec délai d'attente peut simuler des appels intermittents. . appel. Une boucle peut être joliment simulée en ajoutant un appel de délai d'attente dans la fonction dans laquelle l'appel de délai d'attente est transmis. Vous pouvez également limiter le nombre et la durée des boucles en fonction de certaines conditions de la fonction.
5. Correspondant à l'heure actuelle, comment utiliser les radians
C'est un problème mathématique avec lequel j'ai longtemps lutté. le temps, mais je ne me suis pas trompé. Après avoir fait demi-tour, ce n'est plus un problème technique pour comprendre le principe.
6. Concernant le problème de l'acquisition répétée et de la réutilisation des méthodes temporelles
Concernant la situation où il y a des codes répétés dans le code, je n'ai pas pensé à une meilleure façon de réduire la redondance. Par exemple, en termes de temps d'acquisition, il y a des définitions répétées dans les deux appels de timeout, mais s'ils sont placés globalement, il n'y aura aucun effet d'animation et seul le temps statique après la fin du chargement sera affiché. Une autre chose est qu'il y a des parties répétées dans le réglage de la fonction du pointeur. Peut-il être combiné en une seule méthode de fonction puis appelé ?
Tout le monde est invité à proposer des idées, à faire des suggestions sur les lacunes et à communiquer ensemble.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'application horloge est-elle absente de votre téléphone ? La date et l'heure apparaîtront toujours sur la barre d'état de votre iPhone. Cependant, sans l'application Horloge, vous ne pourrez pas utiliser l'horloge mondiale, le chronomètre, le réveil et bien d'autres fonctionnalités. Par conséquent, réparer l’application d’horloge manquante devrait figurer en haut de votre liste de tâches. Ces solutions peuvent vous aider à résoudre ce problème. Correctif 1 – Placer l’application Horloge Si vous avez supprimé par erreur l’application Horloge de votre écran d’accueil, vous pouvez remettre l’application Horloge à sa place. Étape 1 – Déverrouillez votre iPhone et commencez à faire glisser votre doigt vers la gauche jusqu'à atteindre la page Bibliothèque d'applications. Étape 2 – Ensuite, recherchez « horloge » dans le champ de recherche. Étape 3 – Lorsque vous voyez « Horloge » ci-dessous dans les résultats de recherche, maintenez-la enfoncée et

La veille est un mode d'écran de verrouillage qui s'active lorsque l'iPhone est branché sur le chargeur et orienté en orientation horizontale (ou paysage). Il se compose de trois écrans différents, dont l'un affiche l'heure en plein écran. Lisez la suite pour savoir comment changer le style de votre horloge. Le troisième écran de StandBy affiche les heures et les dates dans différents thèmes que vous pouvez faire glisser verticalement. Certains thèmes affichent également des informations supplémentaires, comme la température ou la prochaine alarme. Si vous maintenez une horloge enfoncée, vous pouvez basculer entre différents thèmes, notamment numérique, analogique, mondial, solaire et flottant. Float affiche l'heure dans de grands nombres de bulles dans des couleurs personnalisables, Solar a une police plus standard avec un motif d'éruption solaire dans différentes couleurs et World affiche le monde en mettant en surbrillance
![Comment désactiver les alarmes sur iPhone [2023]](https://img.php.cn/upload/article/000/465/014/169259550735100.png?x-oss-process=image/resize,m_fill,h_207,w_330)
Depuis l’avènement des smartphones, ils ont sans doute remplacé les réveils. Si vous possédez un iPhone, vous pouvez utiliser l'application Horloge pour définir facilement autant d'alarmes à plusieurs reprises tout au long de la journée. L'application vous permet de configurer l'heure de l'alarme, la tonalité, la fréquence de répétition et si vous souhaitez les retarder à l'aide de l'option Snooze. Si vous souhaitez désactiver l'alarme que vous avez définie, l'article suivant devrait vous aider à désactiver et supprimer les alarmes régulières et les alarmes de réveil sur votre iPhone. Comment désactiver une alarme régulière sur iPhone Par défaut, lorsque vous ajoutez une alarme sur l'application Horloge ou demandez à Siri d'ajouter une alarme pour vous, vous créez en fait une alarme normale. Vous pouvez créer autant de réveils sur votre iPhone que vous le souhaitez et les mettre

Apple propose un nouveau mode d'écran de verrouillage dans iOS 17 appelé Mode veille, qui s'active lorsque votre iPhone est branché sur un chargeur (filaire ou sans fil) et placé sur un support en orientation paysage. Ce mode affichera plus d'informations en un coup d'œil que l'écran de verrouillage standard en affichant l'horloge, les données météorologiques, le calendrier et certains widgets. Après avoir activé cette fonctionnalité dans les paramètres, votre iPhone passera automatiquement en mode veille lorsqu'il sera placé en orientation paysage pendant le chargement. Comment changer les couleurs de veille dans iOS 17 Le mode veille propose un ensemble de trois pages (Widgets, Photos et Horloge) que vous pouvez basculer d'avant en arrière en faisant glisser votre doigt sur l'écran. Parmi ces pages, seul l'écran Horloge vous permet de personnaliser les couleurs affichées à l'écran afin que vous puissiez

Les plug-ins de flèches du canevas incluent : 1. Fabric.js, qui possède une API simple et facile à utiliser et peut créer des effets de flèche personnalisés ; 2. Konva.js, qui fournit la fonction de dessiner des flèches et peut créer diverses flèches ; styles ; 3. Pixi.js, qui fournit des fonctions de traitement graphique riches et peut obtenir divers effets de flèche ; 4. Two.js, qui peut facilement créer et contrôler des styles de flèches et des animations 5. Arrow.js, qui peut créer divers effets de flèche ; ; 6. Rough .js, vous pouvez créer des flèches dessinées à la main, etc.

Les détails de l'horloge sur toile incluent l'apparence de l'horloge, les graduations, l'horloge numérique, les aiguilles des heures, des minutes et des secondes, le point central, les effets d'animation, d'autres styles, etc. Introduction détaillée : 1. Apparence de l'horloge, vous pouvez utiliser Canvas pour dessiner un cadran circulaire comme apparence de l'horloge, et vous pouvez définir la taille, la couleur, la bordure et d'autres styles du cadran 2. Lignes d'échelle, tracez des lignes d'échelle dessus ; le cadran pour représenter les heures ou les minutes. Position ; 3. Horloge numérique, vous pouvez dessiner une horloge numérique sur le cadran pour indiquer l'heure et les minutes actuelles ; 4. Aiguille des heures, aiguille des minutes, aiguille des secondes, etc.

Les versions de html2canvas incluent html2canvas v0.x, html2canvas v1.x, etc. Introduction détaillée : 1. html2canvas v0.x, qui est une première version de html2canvas. La dernière version stable est la v0.5.0-alpha1. Il s'agit d'une version mature qui a été largement utilisée et vérifiée dans de nombreux projets ; 2. html2canvas v1.x, il s'agit d'une nouvelle version de html2canvas.

Explorez le framework Canvas : Pour comprendre quels sont les frameworks Canvas couramment utilisés, des exemples de code spécifiques sont nécessaires. Introduction : Canvas est une API de dessin fournie en HTML5, grâce à laquelle nous pouvons obtenir des graphiques et des effets d'animation riches. Afin d'améliorer l'efficacité et la commodité du dessin, de nombreux développeurs ont développé différents frameworks Canvas. Cet article présentera certains frameworks Canvas couramment utilisés et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre comment utiliser ces frameworks. 1.Cadre EaselJSEa
