Heim > Web-Frontend > H5-Tutorial > Hauptteil

HTML5-Canvas realisiert den besonderen Effekt fallender Schneeflocken. Tutorial-Fähigkeiten für HTML5

WBOY
Freigeben: 2016-05-16 15:51:47
Original
1654 Leute haben es durchsucht

Ich habe im Internet viele Darstellungen gesehen, die den Effekt fliegender HTML5-Schneeflocken zeigen. Ich glaube, dass jeder genauso aufgeregt ist wie ich und auch sehr neugierig ist und lernen möchte, wie man den Code implementiert Diese können von vielen Orten heruntergeladen werden Quellcode, aber ich kenne die Ideen und Analysen anderer Leute nicht über die Schwierigkeiten bei der Erstellung solcher Animationen.

Ich habe heutzutage einfach viel gelernt und nutze die Zeit jetzt, um es Schritt für Schritt von der Bedarfsanalyse über Wissenspunkte bis hin zur Programmierung zu analysieren Du, bitte lache nicht.

Das endgültige Rendering sieht wie folgt aus:

Bild 1

1. Bedarfsanalyse

1. Runde Schneeflocke

Die Schneeflockenform in diesem Beispiel verwendet einen Kreis

2. Die Anzahl der Schneeflocken ist festgelegt

Beobachten Sie sorgfältig die Anzahl der weißen Schneeflocken gemäß Abbildung 1. Während des Fallvorgangs sollte die Anzahl der Schneeflocken im gesamten Bild festgelegt werden. Diese Anforderung muss durch unsere Beobachtung und Analyse ermittelt werden. Dies steht im Einklang mit der Szene, die wir im wirklichen Leben sehen, wo Schneeflocken über den ganzen Himmel fliegen.

3. Die Größe der Schneeflocken ist inkonsistent

Jede Schneeflocke hat eine andere Größe, was bedeutet, dass der Radius der Schneeflocke zufällig ist. Dies steht im Einklang mit der Szene, in der wir im wirklichen Leben Schneeflocken über den ganzen Himmel fliegen sehen.

4. Die Position der Schneeflocken verändert sich

Schneeflocken fallen und natürlich verändern sich auch ihre Positionen.

2. Wissenspunkte

1. Zeichnen Sie mit Html5 Canvas JavaScript einen Kreis – so entsteht eine kreisförmige Schneeflocke

In Html5 müssen Sie Canvas verwenden und JavaScript verwenden, um einen Kreis zu zeichnen, um eine kreisförmige Schneeflocke zu bilden – arc(x, y, r, start, stop);

2. Zufallszahlen – erzeugen kreisförmige Schneeflocken mit unterschiedlichen Radien und Koordinaten

In diesem Beispiel muss beim ersten Laden der Webseite eine bestimmte Anzahl von Schneeflocken mit unterschiedlichen Radien und Positionen generiert werden, sodass der Radius und die Koordinaten Zufallszahlen sind, während die Schneeflocken fallen, ihr Radius bleibt unverändert und die Koordinaten liegen innerhalb eines bestimmten Bereichs, sodass die Koordinaten zu diesem Zeitpunkt ebenfalls Zufallszahlen sind – Math.random()

3. Programmierung

1. Vorbereitung

Legen Sie eine Leinwand auf und stellen Sie die Hintergrundfarbe des gesamten Körpers auf Schwarz ein

HTML-Code:

XML/HTML-CodeInhalt in die Zwischenablage kopieren
  1. <canvas id="mycanvas" >
  2. Ihr Browser unterstützt kein Canvas
  3. Leinwand> 
CSS-Code:

CSS-CodeInhalt in die Zwischenablage kopieren
  1. * {
  2. Marge: 0;
  3. Auffüllung: 0;
  4. }
  5.                                                       
  6. #mycanvas { 
  7. Hintergrund: schwarz; }
  8. Der Effekt ist zu diesem Zeitpunkt wie folgt:

Hinweis: Die Leinwand hat standardmäßig eine initialisierte Höhe und Breite, sodass Sie sich darüber keine Sorgen machen müssen

2. Die Leinwand füllt den Bildschirm

Der JavaScript-Code lautet wie folgt:

JavaScript-Code

Inhalt in die Zwischenablage kopieren
  1. //Holen Sie sich die Leinwand von mycanvas
  2. var can = document.getElementById("mycanvas");
  3. var ctx = can.getContext("2d");
  4. //Leinwandbreite
  5. var wid = window.innerWidth
  6. //Leinwandhöhe
  7. var hei = window.innerHeight; can.width=wid;
  8. can.height=hei;
  9. Der Effekt ist zu diesem Zeitpunkt wie folgt:

3. Die Initialisierung erzeugt eine feste Anzahl von Schneeflocken

Gemäß unserer obigen Bedarfsanalyse und Interpretation der Wissenspunkte ist zunächst die Anzahl der Schneeflocken festgelegt, daher müssen wir eine Variable definieren: var schnee = 100. Hier wird davon ausgegangen, dass die Anzahl der Schneeflocken 100 beträgt. Bei der Erzeugung von Schneeflocken sind der Radius und die Position jeder Schneeflocke unterschiedlich. Wir betrachten jede Schneeflocke als Objekt. Zu den Eigenschaften dieses Objekts gehören: Radius, Koordinaten (X, Y). Dann kann ein Schneeflockenobjekt geschrieben werden var snowOject={x:1,y:10,r:5} stellt hier eine kreisförmige Schneeflocke mit den Koordinaten (1,10) und dem Radius 5 dar, da der Radius und die Koordinaten Zufallszahlen sind, wird Mathematik verwendet. random() generiert Radius und Koordinaten (X, Y) für jeweils 100 Schneeflocken;

Dann haben wir hier 100 Schneeflocken. Um nachfolgende Vorgänge zu erleichtern, verwenden wir ein Array, um diese 100 Schneeflockenobjekte zu speichern.

Der JavaScript-Code lautet wie folgt:

JavaScript-Code

Inhalt in die Zwischenablage kopieren
//Anzahl der Schneeflocken
  1. var
  2. Schnee = 100; //Schneeflockenkoordinaten, Radius
  3. var arr = [];
  4. //Speichern Sie die Koordinaten und den Radius jedes Kreises for (
  5. var i = 0; i < snow; i ) { arr.push({ x: Math.random() * wid,
  6. y: Math.random() * hei,
  7. r: Math.random() * 10 1
  8. })
  9. }
  10. 4. Schneeflocken zeichnen
Wir haben oben 100 Schneeflockenradien und Koordinaten (X, Y) generiert. Im Folgenden wird die Leinwand zum Zeichnen von Schneeflocken verwendet (hier zeichnen wir Kreise).
Der JavaScript-Code lautet wie folgt:


JavaScript-Code

Inhalt in die Zwischenablage kopieren

  1. //Schneeflocken zeichnen
  2. Funktion DrawSnow() {
  3. ctx.fillStyle="white"
  4. ctx.beginPath();
  5.  for (var i = 0; i < snow; i ) {
  6. var p = arr[i];
  7. ctx.moveTo(p.x,p.y);
  8. ctx.arc(p.x,p.y,p.r,0,2*Math.PI,
  9. false);
  10. }
  11. ctx.fill();
  12. ctx.closePath();
Dann rufen Sie die Funktion DrawSnow() auf. Der Effekt ist wie folgt:

Sie können versuchen, die Webseite mehrmals zu aktualisieren, um zu sehen, ob Schneeflocken unterschiedlicher Größe und Position erzeugt werden (normalerweise ist dies möglich). Sobald Sie dies tun, sind Sie dem endgültigen Effekt nahe

Hinweis: Da hier 100 Kreise gezeichnet werden müssen, werden die Zeichenstartkoordinaten jedes Mal neu definiert, wenn ein Kreis gezeichnet wird: ctx.moveTo(p.x,p.y); sonst treten seltsame Effekte auf. Probieren Sie es aus

5. Schneeflocken flattern

Wir haben oben 100 Schneeflocken gezeichnet. Leider können wir den veränderten Effekt nur sehen, wenn wir die Webseite aktualisieren, aber was wir erreichen müssen, ist, dass sich die Schneeflocken weiter bewegen.

Zuerst müssen wir die Funktion setInterval verwenden, um die Schneeflocken kontinuierlich neu zu zeichnen. Das Intervall beträgt hier 50 Millisekunden: setInterval(DrawSnow,50);

Gleichzeitig müssen die Koordinaten (X, Y) jeder Schneeflocke ständig geändert werden (innerhalb eines bestimmten Bereichs). Die Schneeflocken fallen hier von links oben nach rechts unten, also die X- und Y-Koordinatenwerte ​​​​Jede Schneeflocke nimmt weiter zu, dann verwenden wir eine Funktion SnowFall(), um die Regeln für das Fallen der Schneeflocken zu definieren

Der Funktionscode lautet wie folgt:

JavaScript-Code
Inhalt in die Zwischenablage kopieren
  1. //雪花飘落   
  2. Funktion SnowFall() {   
  3.     for (var i = 0; i < snow; i ) {   
  4.         var p = arr[i];   
  5.         p.y  = Math.random() * 2   1;   
  6.         if (p.y > hei) {   
  7.             p.y = 0;   
  8.         }   
  9.         p.x  = Math.random() * 2   1;   
  10.         if (p.x > wid) {   
  11.             p.x = 0;   
  12.     "white-space:pre">    }   
  13.     }   
  14. }  


然后将该函数放入DrawSnow()执行, 注意:我们每隔50毫毛重画雪花, 必须擦除画布, 所以DrawSnow()函Die Funktion „clearRect()“ wird verwendet, um Folgendes anzuzeigen: ctx.clearRect(0, 0, wid, hei);

此时DrawSnow函数定义如下:

JavaScript-Code复制内容到剪贴板
  1. //画雪花   
  2. Funktion DrawSnow() {   
  3.     ctx.clearRect(0, 0, wid, hei);   
  4.     ctx.fillStyle = "white";   
  5.     ctx.beginPath();   
  6.     for (var i = 0; i < snow; i ) {   
  7.         var p = arr[i];   
  8.         ctx.moveTo(p.x, p.y);   
  9.         ctx.arc(p.x, p.y, p.r, 0, 2 * Math.PI, false);   
  10.     }   
  11.     ctx.fill();   
  12.     SnowFall();   
  13.     ctx.closePath();   
  14. }   

Zum Beispiel setInterval(DrawSnow, 50); 

OK, 经过我们上述步骤,小伙伴们是否已经对整个过程及技术实现很清晰了.

完整代码如下(大家可以直接复制到自己项目中执行,测试下效果):

XML/HTML-Code复制内容到剪贴板
  1. >  
  2. <html>  
  3.   
  4.     <Kopf>  
  5.         <meta charset="utf- 8" />  
  6.         <Titel>Titel>  
  7.         <script src="js/ jquery-1.8.3.min.js">script>  
  8.         <Stil Typ="text/ css">  
  9.             * {   
  10.                 Marge: 0;   
  11.                 padding: 0;   
  12.             }   
  13.                
  14.             #mycanvas {   
  15.                 Hintergrund: schwarz;   
  16.             }
  17. Stil>
  18.  Kopf> 
  19. <Körper>
  20.  <canvas id="mycanvas" >
  21. Ihr Browser unterstützt kein Canvas
  22. Leinwand>
  23. <Skript>
  24. //Mycanvas-Leinwand holen
  25. var can = document.getElementById("mycanvas");
  26. var ctx = can.getContext("2d");
  27. //Leinwandbreite
  28. var
  29. wid = window.innerWidth; //Leinwandhöhe
  30. var
  31. hei
  32. = window.innerHeight; can.width
  33. = wid;
  34. can.height = hei;
  35. //Anzahl der Schneeflocken
  36. var Schnee
  37. =
  38. 100
  39. ;
  40. //Schneeflockenkoordinaten, Radius var arr = [] //Speichern Sie die Koordinaten und den Radius jedes Kreises
  41. für (var
  42. i
  43. = 0; i
  44. <
  45. Schnee; i ) { arr.push({ x: Math.random() * wid,
  46.                     y : Math.random() * hé,   
  47.                     r: Math.random() * 10   1   
  48.                 })   
  49.             }   
  50.             //画雪花   
  51.             fonction DrawSnow() {   
  52.                 ctx.clearRect(0, 0, wid, hei);   
  53.                 ctx.fillStyle = "blanc";   
  54.                 ctx.beginPath();   
  55.                 pour (var i = 0; i < neige; i ) {   
  56.                     var p = arr[i];   
  57.                     ctx.moveTo(p.x, p.y);   
  58.                     ctx.arc(p.x, p.y, p.r, 0, 2 * Math.PI, false);   
  59.                 }   
  60.                 ctx.fill();   
  61.                 SnowFall();   
  62.                 ctx.closePath();   
  63.              }  
  64.             //雪花飘落   
  65.             fonction SnowFall() {   
  66.                 pour (var i = 0; i < neige; i ) {   
  67.                     var p = arr[i];   
  68.                     p.y  = Math.random() * 2   1 ;   
  69.                     si (p.y > hei) {   
  70.                         p.y = 0;   
  71.                      }   
  72.                     p.x  = Math.random() * 2   1 ;   
  73.                     si (p.x > wid) {   
  74.                         p.x = 0;   
  75.                     }   
  76.                 }   
  77.             }   
  78.             setInterval(DrawSnow, 50);   
  79.         script>  
  80.     corps>  
  81.   
  82. html>  
  83.   

好了,今天分享就到这里,希望对大家的学习有所帮助。
原文:http://www.cnblogs.com/tangyifeng/p/5253629.html

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage