hideout-lastation.com
Paradis Pour Les Concepteurs Et Les Développeurs


Créer un chargeur animé Favicon avec JavaScript

Les favicons sont une partie cruciale de l'image de marque en ligne, ils donnent un signal visuel aux utilisateurs, et les aident à distinguer votre site des autres. Bien que la plupart des favicons soient statiques, il est également possible de créer des favicons animés .

Un favicon constamment en mouvement est certainement ennuyeux pour la plupart des utilisateurs, et nuit également à l'accessibilité, mais quand il est seulement animé pendant une courte période en réponse à une action de l'utilisateur ou à un événement de fond, il peut fournir des informations visuelles supplémentaires . améliorer l'expérience utilisateur.

Dans ce post, je vais vous montrer comment créer un chargeur circulaire animé dans un canevas HTML, et comment vous pouvez l'utiliser comme favicon. Un chargeur animé favicon est un excellent outil pour visualiser la progression de toute action effectuée sur une page, comme le téléchargement de fichiers ou le traitement d'image. Vous pouvez aussi regarder la démo de ce tutoriel sur Github .

1. Créez le élément

Tout d'abord, nous devons créer une animation de toile qui dessine un cercle complet, 100 pour cent au total (ce sera important lorsque nous devons incrémenter l'arc).

  

J'utilise la taille de favicon standard, 16 * 16 pixels, pour la toile. Vous pouvez utiliser une taille plus grande que celle-ci si vous le souhaitez, mais notez que l'image de la zone de travail sera réduite à la zone de 16 pixels 2 lorsqu'elle est appliquée en tant que favicon.

2. Vérifiez si est pris en charge

Dans le gestionnaire d'événements onload(), nous obtenons une référence pour l'élément canvas [ cv ] en utilisant la méthode querySelector(), et querySelector() son objet de contexte de dessin 2D [ ctx ] à l'aide de la méthode getContext() .

 onload = function () {cv = document.querySelector ('# cvl'), ctx = cv.getContext ('2d'); if (!! ctx) {/ * ... * /}}; 

Nous devons également vérifier si le canevas est supporté par l' UA en ctx que l'objet de contexte de dessin [ ctx ] existe et n'est pas indéfini . Nous placerons tout le code appartenant à l'événement load dans cette condition if .

3. Créez les variables initiales

Créons trois autres variables globales, s pour l' angle de départ de l'arc, tc pour l' identifiant de la setInterval(), et pct pour la valeur en pourcentage du même temporisateur . Le code tc = pct = 0 affecte 0 comme valeur initiale pour les variables tc et pct .

 onload = function () {cv = document.querySelector ('# cvl'), ctx = cv.getContext ('2d'); if (!! ctx) {s = 1, 5 * Math.PI, tc = pct = 0; }}; 

Pour montrer comment la valeur de s été calculée, laissez-moi vous expliquer rapidement comment fonctionnent les angles d'arc .

Angles d'arc

L' angle sous-tendu (l'angle formé par les deux rayons qui définissent un arc) de la circonférence d'un cercle est 2π rad, où rad est le symbole de l'unité radian. Cela fait que l' angle pour un arc de quart est égal à 0, 5π rad .

Lors de la visualisation de la progression du chargement, nous voulons que le cercle sur le canevas soit dessiné à partir de la position supérieure plutôt que par défaut à droite.

En allant dans le sens des aiguilles d'une montre (l'arc de direction par défaut est dessiné sur la toile) à partir de la bonne position, le point haut est atteint après trois quarts, soit un angle de 1.5π rad . Par conséquent, j'ai créé la variable s = 1.5 * Math.PI pour désigner plus tard l'angle de départ pour les arcs à dessiner sur le canevas.

4. Style du cercle

Pour l'objet de contexte de dessin, nous définissons les propriétés lineWidth et lineWidth du cercle que nous allons dessiner à l'étape suivante. La propriété strokeStyle représente sa couleur.

 onload = function () {cv = document.querySelector ('# cvl'), ctx = cv.getContext ('2d'); if (!! ctx) {s = 1, 5 * Math.PI, tc = pct = 0; ctx.lineWidth = 2; ctx.strokeStyle = 'fuchsia'; }}; 

5. Dessinez le cercle

Nous ajoutons un gestionnaire d'événement click au bouton Load [ #lbtn ] qui déclenche un timer setInterval de 60 millisecondes, qui exécute la fonction responsable du dessin du cercle [ updateLoader() ] toutes les 60ms jusqu'à ce que le cercle soit entièrement dessiné.

La méthode setInterval() renvoie un identifiant de temporisateur pour identifier son temporisateur affecté à la variable tc .

 onload = function () {cv = document.querySelector ('# cvl'), ctx = cv.getContext ('2d'); if (!! ctx) {s = 1, 5 * Math.PI, tc = pct = 0, btn = document.querySelector ('# lbtn'); ctx.lineWidth = 2; ctx.strokeStyle = 'fuchsia'; btn.addEventListener ('clic', fonction () {tc = setInterval (updateLoader, 60);}); }}; 

6. Créez la fonction personnalisée updateLoader()

Il est temps de créer la fonction updateLoader() personnalisée qui doit être appelée par la méthode setInterval() lorsque le bouton est cliqué (l'événement est déclenché). Permettez-moi de vous montrer le code d'abord, puis nous pouvons aller avec l'explication.

 function updateLoader () {ctx.clearRect (0, 0, 16, 16); ctx.beginPath (); ctx.arc (8, 8, 6, s, (pct * 2 * Math.PI / 100 + s)); ctx.stroke (); if (pct === 100) {clearInterval (tc); revenir; } pct ++; } 

La méthode clearRect() efface la zone rectangulaire du canevas définie par ses paramètres: les coordonnées (x, y) du coin supérieur gauche. La ligne clearRect(0, 0, 16, 16) efface tout ce que nous avons créé sur la toile 16 * 16 pixels.

La méthode beginPath() crée un nouveau chemin pour le dessin et la méthode stroke() peint sur ce nouveau chemin .

À la fin de la fonction updateLoader(), le pourcentage count [ pct ] est incrémenté de 1, et avant l'incrément, nous vérifions s'il est égal à 100 . Quand c'est 100 pour cent, la setInterval() (identifiée par le timer id, tc ) est effacée à l'aide de la méthode clearInterval() .

Les trois premiers paramètres de la méthode arc() sont les coordonnées (x, y) du centre de l'arc et de son rayon . Les quatrième et cinquième paramètres représentent les angles de début et de fin auxquels le dessin de l'arc commence et se termine.

Nous avons déjà décidé du point de départ du cercle loader, qui est à l'angle s, et ce sera le même dans toutes les itérations .

L'angle final augmentera cependant avec le nombre de pourcentages, nous pouvons calculer la taille de l'incrément de la manière suivante. Dire 1% (la valeur 1 sur 100) est équivalent à l'angle α sur 2π dans un cercle (2π = angle de toute la circonférence), alors la même chose peut être écrite comme l'équation suivante:

 1/100 = α / 2π 

En réarrangeant l'équation:

 α = 1 * 2π / 100 α = 2π / 100 

Donc, 1% est équivalent à l'angle 2π / 100 dans un cercle. Ainsi, l'angle de fin pendant chaque incrément de pourcentage est calculé en multipliant 2π / 100 par la valeur en pourcentage . Ensuite, le résultat est ajouté à s (angle de départ), de sorte que les arcs sont tirés à partir de la même position de départ à chaque fois. C'est pourquoi nous avons utilisé la formule pct * 2 * Math.PI / 100 + s pour calculer l'angle de fin dans l'extrait de code ci-dessus.

7. Ajouter le favicon

Plaçons un élément de lien favicon dans le HTML section, directement ou via JavaScript.

Dans la fonction updateLoader(), nous updateLoader() abord le favicon en utilisant la méthode querySelector(), et l' lnk variable lnk . Ensuite, nous devons exporter l'image de la toile chaque fois qu'un arc est dessiné dans une image codée en utilisant la méthode toDataURL(), et affecter ce contenu de l'URI de données en tant qu'image favicon . Cela crée un favicon animé qui est le même que le chargeur de toile .

 onload = function () {cv = document.querySelector ('# cvl'), ctx = cv.getContext ('2d'); if (!! ctx) {s = 1.5 * Math.PI, tc = pct = 0, btn = document.querySelector ('# lbtn'), lnk = document.querySelector ('lien [rel = "icône"]') ; ctx.lineWidth = 2; ctx.strokeStyle = 'fuchsia'; btn.addEventListener ('clic', fonction () {tc = setInterval (updateLoader, 60);}); }}; function updateLoader () {ctx.clearRect (0, 0, 16, 16); ctx.beginPath (); ctx.arc (8, 8, 6, s, (pct * 2 * Math.PI / 100 + s)); ctx.stroke (); lnk.href = cv.toDataURL ('image / png'); if (pct === 100) {clearTimeout (tc); revenir; } pct ++; } 

Vous pouvez regarder le code complet sur Github .

Bonus: Utiliser le chargeur pour les événements asynchrones

Lorsque vous devez utiliser cette animation de canevas conjointement avec une action de chargement dans une page Web, affectez la fonction updateLoader() tant que gestionnaire d'événement pour l'événement progress() de l'action .

Par exemple, notre JavaScript va changer comme ceci dans AJAX :

 onload = function () {cv = document.querySelector ('# cvl'), ctx = cv.getContext ('2d'); if (!! ctx) {s = 1.5 * Math.PI, lnk = document.querySelector ('link [rel = "icône"]'); ctx.lineWidth = 2; ctx.strokeStyle = 'fuchsia'; } var xhr = new XMLHttpRequest (); xhr.addEventListener ('progress', updateLoader); xhr.open ('GET', 'https://xyz.com/abc'); xhr.send (); } function updateLoader (evt) {ctx.clearRect (0, 0, 16, 16); ctx.beginPath (); ctx.arc (8, 8, 6, s, (evt.loaded * 2 * Math.PI / evt.total + s)); ctx.stroke (); lnk.href = cv.toDataURL ('image / png'); } 

Dans la méthode arc(), remplacez la valeur en pourcentage [ pct ] par la propriété loaded de l'événement: elle indique la quantité de fichier chargée et, à la place de 100 la propriété total de ProgressEvent, qui indique le total montant à charger.

Dans de tels cas, setInterval() n'est pas nécessaire, car l'événement progress() est déclenché automatiquement au fur et à mesure du chargement.

5 types de suiveurs de médias sociaux et comment les engager

5 types de suiveurs de médias sociaux et comment les engager

Construire un réseau de médias sociaux, c'est comme essayer d'être l'enfant le plus populaire à l'école seulement environ 1000 fois plus difficile. Souvent, il semble que vous avez besoin de casser une sorte de code secret de la popularité hautement sélective afin de réussir à se connecter avec votre public cible.Heureuse

(Conseils techniques et de conception)

Un guide de l'étiquette essentielle de Tumblr: à faire et à ne pas faire

Un guide de l'étiquette essentielle de Tumblr: à faire et à ne pas faire

Tumblr est plus qu'un simple site de réseau social - c'est une communauté. Malgré la diversité des intérêts de la communauté, toutes ces communautés fonctionnent sur le même ensemble d'étiquette acceptée mais non officielle sur Tumblr. Certaines règles régissent ces pratiques, et bien qu'elles ne soient pas officielles, les choses peuvent devenir méchantes si elles ne sont pas suivies.En tant que m

(Conseils techniques et de conception)