J'ai vu de nombreux affichages sur Internet montrant l'effet des flocons de neige HTML5 volant, ce qui est en effet très fascinant, je crois que tout le monde est aussi excité que moi et est également très curieux et veut étudier comment implémenter le code ; ceux-ci peuvent être téléchargés à partir de nombreux endroits Code source, mais je ne connais pas les idées des autres et l'analyse des difficultés lors de la réalisation de telles animations.
Il m'est arrivé d'étudier beaucoup ces jours-ci, et je profite du temps présent pour décortiquer étape par étape l'analyse de la demande, les points de connaissances et la programmation si j'essaie de me ridiculiser devant. toi, s'il te plaît, ne ris pas.
Le rendu final est le suivant :
Photo 1
1. Analyse de la demande
1. Flocon de neige rond
La forme du flocon de neige dans cet exemple utilise un cercle
2. Le nombre de flocons de neige est fixe
Observez attentivement le nombre de flocons de neige blancs selon la figure 1. Pendant le processus de chute, le nombre de flocons de neige dans l'ensemble de l'image doit être fixé. Cette exigence doit être obtenue grâce à notre observation et analyse. Cela correspond à la scène que nous voyons dans la vraie vie où des flocons de neige volent partout dans le ciel.
3. La taille des flocons de neige est incohérente
Chaque flocon de neige a une taille différente, ce qui signifie que le rayon du flocon de neige est aléatoire. Cela concorde avec la scène où l’on voit des flocons de neige voler partout dans le ciel dans la vraie vie.
4. La position des flocons de neige bouge
Les flocons de neige tombent et, naturellement, leurs positions bougent également.
2. Points de connaissances
1. Utilisez Html5 Canvas JavaScript pour dessiner un cercle - formant un flocon de neige circulaire
En HTML5, vous devez utiliser Canvas et utiliser JavaScript pour dessiner un cercle afin de former un flocon de neige circulaire - arc(x, y, r, start, stop
);2. Nombres aléatoires : générez des flocons de neige circulaires avec différents rayons et coordonnées
Dans cet exemple, lorsque la page Web est chargée pour la première fois, un certain nombre de flocons de neige avec des rayons et des positions différents doivent être générés, donc le rayon et les coordonnées sont des nombres aléatoires tandis que les flocons de neige tombent, leur rayon ; reste inchangé et les coordonnées changent dans une certaine plage, donc les coordonnées sont également des nombres aléatoires à ce moment——Math.random()
.3. Programmation
1.Préparation
Mettez une toile et définissez la couleur de fond de tout le corps sur noir
Code HTML :
Code CSS :
Remarque : le canevas a une hauteur et une largeur initialisées par défaut, vous n'avez donc pas à vous en soucier
2. La toile remplit l'écranLe code JavaScript est le suivant :
L'effet à ce moment est le suivant :
3. L'initialisation génère un nombre fixe de flocons de neige
Selon notre analyse de la demande ci-dessus et notre interprétation des points de connaissance, tout d'abord, le nombre de flocons de neige est fixe, nous devons donc définir une variable var snow = 100 ; ici, on suppose que le nombre de flocons de neige est de 100 ;
Lors de la génération de flocons de neige, le rayon et la position de chaque flocon de neige sont différents. Nous considérons chaque flocon de neige comme un objet, alors les propriétés de cet objet incluent : le rayon, les coordonnées (X, Y), puis un objet flocon de neige peut être écrit comme var snowOject={x:1,y:10,r:5}, représente ici un flocon de neige circulaire avec des coordonnées (1,10) et un rayon 5 ; dans cet exemple, puisque le rayon et les coordonnées sont des nombres aléatoires, Math est utilisé. random() génère respectivement un rayon et des coordonnées (X, Y) pour 100 flocons de neige ;
Ensuite, nous avons ici 100 flocons de neige, donc afin de faciliter les opérations ultérieures, nous utilisons un tableau pour sauvegarder ces 100 objets flocon de neige.Le code JavaScript est le suivant :
4. Dessine des flocons de neige
.
Le code JavaScript est le suivant :
Appelez ensuite la fonction DrawSnow(), l'effet est le suivant :
Vous pouvez essayer d'actualiser la page Web plusieurs fois pour voir si des flocons de neige de différentes tailles et positions seront générés (normalement, c'est possible. Une fois que vous faites cela, vous êtes proche de l'effet final
).Remarque : Comme 100 cercles doivent être dessinés ici, les coordonnées de début du dessin sont redéfinies à chaque fois qu'un cercle est dessiné : ctx.moveTo(p.x,p.y); sinon des effets étranges se produiront. essayez-le
5. Flocons de neige flottant
Nous avons dessiné 100 flocons de neige ci-dessus. Malheureusement, nous ne pouvons voir l'effet changeant qu'en actualisant la page Web, mais ce que nous devons réaliser, c'est que les flocons de neige continuent de bouger.
Nous devons d'abord utiliser la fonction setInterval pour redessiner continuellement les flocons de neige. L'intervalle ici est de 50 millisecondes : setInterval(DrawSnow,50);
En même temps, les coordonnées (X, Y) de chaque flocon de neige doivent être constamment modifiées (dans une certaine plage). Les flocons de neige tombent ici du coin supérieur gauche vers le coin inférieur droit, donc les valeurs des coordonnées X et Y. de chaque flocon de neige sont en constante augmentation, puis nous utilisons une fonction SnowFall() pour définir les règles de chute des flocons de neige
Le code de fonction est le suivant :
然后将该函数放入DrawSnow()执行,注意:我们每隔50毫毛重画雪花,必须擦除画布,所以DrawSnow()函La fonction clearRect() est la suivante : ctx.clearRect(0, 0, wid, hei);
此时DrawSnow函数定义如下:
最后执行setInterval(DrawSnow, 50);
OK,
完整代码如下(大家可以直接复制到自己项目中执行,测试下效果):