Rumah > hujung hadapan web > Tutorial H5 > Kanvas HTML5 merealisasikan kesan khas kemahiran tutorial snowflakes_html5 yang jatuh

Kanvas HTML5 merealisasikan kesan khas kemahiran tutorial snowflakes_html5 yang jatuh

WBOY
Lepaskan: 2016-05-16 15:51:47
asal
1701 orang telah melayarinya

Saya telah melihat banyak paparan di Internet yang menunjukkan kesan html5 salji terbang, yang sememangnya sangat menarik Saya percaya bahawa semua orang teruja seperti saya dan juga sangat ingin tahu dan ingin mengkaji cara melaksanakan kod tersebut ini boleh dimuat turun dari banyak tempat Kod sumber, tetapi saya tidak tahu idea orang lain dan analisis kesukaran semasa membuat animasi sedemikian.

Saya baru sahaja belajar banyak hari ini, dan saya memanfaatkan masa sekarang untuk membedah langkah demi langkah daripada analisis permintaan, mata pengetahuan dan pengaturcaraan Jika saya cuba memperbodohkan diri sendiri di hadapan awak, tolong jangan gelak.

Penyampaian akhir adalah seperti berikut:

Gambar 1

1. Analisis permintaan

1. Kepingan salji bulat

Bentuk kepingan salji dalam contoh ini menggunakan bulatan

2. Bilangan kepingan salji tetap

Perhatikan dengan teliti bilangan kepingan salji putih mengikut Rajah 1. Semasa proses jatuh, bilangan kepingan salji dalam keseluruhan gambar perlu diperbaiki Keperluan ini perlu diperolehi melalui pemerhatian dan analisis kami. Ini konsisten dengan adegan yang kita lihat dalam kehidupan sebenar di mana kepingan salji berterbangan di seluruh langit.

3. Saiz kepingan salji tidak konsisten

Setiap kepingan salji mempunyai saiz yang berbeza, bermakna jejari kepingan salji adalah rawak. Ini konsisten dengan adegan di mana kita melihat kepingan salji terbang di seluruh langit dalam kehidupan sebenar.

4. Kedudukan kepingan salji bergerak

Kepingan salji jatuh, dan secara semula jadi kedudukannya juga bergerak.

2. Mata pengetahuan

1 Gunakan JavaScript Kanvas Html5 untuk melukis bulatan - membentuk kepingan salji bulat

Dalam Html5, anda perlu menggunakan Kanvas dan menggunakan JavaScript untuk melukis bulatan untuk membentuk kepingan salji bulat - arka(x, y, r, mula, berhenti

).

2. Nombor rawak—hasilkan kepingan salji bulat dengan jejari dan koordinat yang berbeza

Dalam contoh ini, apabila halaman web dimuatkan buat kali pertama, sejumlah kepingan salji dengan jejari dan kedudukan yang berbeza perlu dijana, jadi jejari dan koordinat ialah nombor rawak semasa kepingan salji jatuh, jejarinya kekal tidak berubah dan koordinat berada dalam julat tertentu, jadi koordinat juga adalah nombor rawak pada masa ini——Math.random()

3. Pemrograman

1. Persediaan

Letakkan kanvas dan tetapkan warna latar belakang seluruh badan kepada hitam

Kod HTML:

Kod XML/HTMLSalin kandungan ke papan keratan
  1. <kanvas id="mycanvas" >
  2. Penyemak imbas anda tidak menyokong kanvas
  3. kanvas> 

Kod CSS:

Kod CSSSalin kandungan ke papan keratan
  1. * {
  2. margin: 0;
  3. lapik: 0;
  4. }
  5.                                                        
  6. #mycanv
  7. sebagai { 
  8. latar belakang
  9. : hitam; }
  10. Kesan pada masa ini adalah seperti berikut:
Nota: kanvas mempunyai ketinggian dan lebar yang dimulakan secara lalai, jadi anda tidak perlu risau tentangnya

2. Kanvas memenuhi skrin

Kod JavaScript adalah seperti berikut:

Kod JavaScript

Salin kandungan ke papan keratan

  1. //Dapatkan kanvas mycanvas
  2. var boleh = document.getElementById("mycanvas");
  3. var ctx = can.getContext("2d");
  4. //Lebar kanvas
  5. var
  6. wid = window.innerWidth
  7. //Ketinggian kanvas
  8. var
  9. hei = window.innerHeight boleh.width=wid;
  10. boleh.height=hei;
  11. Kesan pada masa ini adalah seperti berikut:

3. Permulaan menjana bilangan kepingan salji yang tetap

Menurut analisis permintaan di atas dan tafsiran mata pengetahuan, pertama sekali, bilangan kepingan salji adalah tetap, jadi kita perlu menentukan pembolehubah var salji = 100 di sini diandaikan bahawa bilangan kepingan salji ialah 100; Apabila menghasilkan kepingan salji, jejari dan kedudukan setiap kepingan salji adalah berbeza Kami menganggap setiap kepingan salji sebagai objek, maka sifat objek ini termasuk: jejari, koordinat (X, Y), maka objek kepingan salji boleh ditulis sebagai. var snowOject={x:1,y:10,r:5}, di sini mewakili kepingan salji bulat dengan koordinat (1,10) dan jejari 5 dalam contoh ini, memandangkan jejari dan koordinat ialah nombor rawak, Matematik digunakan . rawak() menjana jejari dan koordinat (X, Y) untuk 100 kepingan salji masing-masing

Kemudian kami mempunyai 100 kepingan salji di sini, jadi untuk memudahkan operasi seterusnya, kami menggunakan tatasusunan untuk menyimpan 100 objek kepingan salji ini.

Kod JavaScript adalah seperti berikut:

Kod JavaScript

Salin kandungan ke papan keratan
//Bilangan kepingan salji
  1. var
  2. salji = 100;
  3. //Koordinat kepingan salji, jejari
  4. var
  5. arr = []; //Simpan koordinat dan jejari setiap bulatan
  6. untuk
  7. (var i = 0; i < salji; i ) { arr.push({
  8. x: Math.random() * wid,
  9. y: Math.random() * hei,
  10. r: Math.random() * 10 1
  11. })
  12. }
4. Lukiskan kepingan salji


Kami telah menghasilkan 100 jejari kepingan salji dan koordinat (X, Y) di atas adalah menggunakan kanvas untuk melukis kepingan salji (di sini, kami melukis bulatan di sini Kod JavaScript adalah seperti berikut:

Kod JavaScript

Salin kandungan ke papan keratan
  1. //Melukis kepingan salji
  2. fungsi DrawSnow() {
  3. ctx.fillStyle="putih";
  4. ctx.beginPath();
  5.  
  6. untuk (var i = 0; i < salji; 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,
  10. salah
  11. ); }
  12. ctx.fill();
  13. ctx.closePath();
  14. Kemudian panggil fungsi DrawSnow(), kesannya adalah seperti berikut:

Anda boleh cuba memuat semula halaman web beberapa kali untuk melihat sama ada kepingan salji dengan saiz dan kedudukan yang berbeza akan dijana (biasanya mungkin apabila anda melakukan ini, anda hampir dengan kesan akhir

). Nota: Oleh kerana 100 bulatan perlu dilukis di sini, koordinat permulaan lukisan ditakrifkan semula setiap kali bulatan dilukis: ctx.moveTo(p.x,p.y); jika tidak, kesan pelik akan berlaku. cubalah

5. Kepingan salji berkibar

Kami telah melukis 100 kepingan salji di atas Malangnya, kami hanya dapat melihat kesan perubahan dengan menyegarkan halaman web, tetapi apa yang perlu kami capai ialah kepingan salji itu terus bergerak. Mula-mula kita perlu menggunakan fungsi setInterval untuk terus melukis semula kepingan salji Selang di sini ialah 50 milisaat: setInterval(DrawSnow,50);

Pada masa yang sama, koordinat (X, Y) setiap kepingan salji perlu sentiasa ditukar (dalam julat tertentu Kepingan salji di sini jatuh dari kiri atas ke kanan bawah, jadi nilai koordinat X dan Y). setiap kepingan salji berada dalam Terus meningkat, kemudian kami menggunakan fungsi SnowFall() untuk mentakrifkan peraturan jatuh kepingan salji

Kod fungsi adalah seperti berikut:

Kod JavaScript

Salin kandungan ke papan keratan
  1. //雪花飘落   
  2. fungsi SnowFall() {   
  3.     untuk (var i = 0; i < salji; i ) {   
  4. >         var p = arr[i];   
  5.         p.y  = Math.random() * 2   1;   
  6.         jika (p.y > hei) {   
  7.             p.y = 0;   
  8.         }   
  9.         p.x  = Math.random() * 2   1;   
  10.         jika (p.x > wid) {   
  11.             p.x = 0;   
  12.     "white-space:pre">    }   
  13.     }   
  14. }  


然后将该函数放入DrawSnow()执行,注意:我们每隔50毫毛重画雪花,必陻,政花,必陻,政必陻,政每隔函数体内必须在前面执行clearRect()函数,即: ctx.clearRect(0, 0, wid, hei);

此时DrawSnow函数定义如下:
Kod JavaScript复制内容到剪贴板
  1. //画雪花   
  2. fungsi DrawSnow() {   
  3.     ctx.clearRect(0, 0, wid, hei);   
  4.     ctx.fillStyle = "putih";   
  5.     ctx.beginPath();   
  6.     untuk (var i = 0; i < salji; i ) {   
  7. >         var
  8.  p = arr[i];   
  9.         ctx.moveTo(p.x, p.y);   
  10.         ctx.arc(p.x, p.y, p.r, 0, 2 * Math.PI, false
  11. );   
  12.     }   
  13.     ctx.fill();   
  14.     SnowFall();   
  15.     ctx.closePath();   
  16. }   

最后执行setInterval(DrawSnow, 50); 

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

完整代码如下(大家可以直接复制到自己项目中执行,测试下效果)>:<🎜
Kod XML/HTML复制内容到剪贴板
  1. >  
  2. <html>  
  3.   
  4.     <kepala>  
  5.         <meta charset="utf- 8" />  
  6.         <tajuk>tajuk>  
  7.         <skrip src="js/ jquery-1.8.3.min.js">skrip>  
  8.         <gaya taip="teks/ css">  
  9.             * {   
  10.                 margin: 0;   
  11.                 pelapis: 0;   
  12.             }   
  13.                
  14.             #mycanvas {   
  15.                 latar belakang: hitam;   
  16.             }
  17. gaya>
  18.  kepala> 
  19. <badan>
  20.  <kanvas id="mycanvas" >
  21. Penyemak imbas anda tidak menyokong kanvas
  22. kanvas>
  23. <skrip>
  24. //Dapatkan kanvas mycanvas
  25. var boleh = dokumen.getElementById("mycanvas");
  26. var
  27. ctx = boleh.getContext("2d"); //Lebar kanvas
  28. var
  29. wid
  30. = tetingkap.lebar dalam //Ketinggian kanvas
  31. var
  32. hei
  33. = tetingkap.innerHeight
  34. boleh.lebar
  35. = lebar
  36. boleh.tinggi
  37. = hei; //Bilangan kepingan salji
  38. var
  39. salji
  40. = 100 //Koordinat kepingan salji, jejari
  41. var
  42. arr
  43. = []; //Simpan koordinat dan jejari setiap bulatan untuk (var
  44. i
  45. = 0; i < salji; i ) { arr.push({
  46. x: Math.random() * wid,
  47.                     y: Math.random() * hei,   
  48.                     r: Math.random() * 10   1   
  49.                 })   
  50.             }   
  51.             //画雪花   
  52.             Funktion DrawSnow() {   
  53.                 ctx.clearRect(0, 0, wid, hei);   
  54.                 ctx.fillStyle = "white";   
  55.                 ctx.beginPath();   
  56.                 für 🎜> Schnee; i ) {                        var p = arr[i];   
  57.                     ctx.moveTo(p.x, p.y);                        ctx.arc(p.x, p.y, p.r, 0, 2 * Math.PI, false);                    }   
  58.                 ctx.fill();   
  59.                 SnowFall();   
  60.                 ctx.closePath();   
  61.             }  
  62.             //雪花飘落   
  63.             Funktion SnowFall() {   
  64.                 für 🎜> Schnee; i ) {                        var p = arr[i];   
  65.                     p.y  = Math.random() * 2   1;                        if (p.y > hei) {   
  66.                            
  67.                     }                        p.x  = Math.random() * 2   1;   
  68.                     if (p.x > wid) {                               
  69.                     }   
  70.                 }   
  71.             }                setInterval(DrawSnow, 50);   
  72.         Skript>  
  73.     
  74. Körper>
  75.   
  76.   
  77. html>  
  78.    好了 , 今天分享就到这里 , 希望对大家的学习有所帮助。 原文 : : 🎜> http://www.cnblogs.com/tangyifeng/p/5253629.html
Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan