Rumah hujung hadapan web Tutorial H5 Contoh tutorial HTML5 Canvas super cool kembang api mekar kod pelaksanaan kemahiran tutorial_html5

Contoh tutorial HTML5 Canvas super cool kembang api mekar kod pelaksanaan kemahiran tutorial_html5

May 16, 2016 pm 03:47 PM

Ini adalah animasi Kanvas HTML5 yang hebat. Ia akan mensimulasikan kesan khas animasi bunga api yang mekar dalam kehidupan sebenar kita. Kesannya sangat realistik, tetapi ia adalah simulasi komputer ia, kesannya masih agak teruk, hehe. Satu perkara yang luar biasa tentang animasi Kanvas HTML5 ini ialah prestasinya pada dasarnya tiada lag pada Chrome, walaupun anda menyalakan banyak bunga api.

Mari analisa secara ringkas proses dan kod untuk melaksanakan kesan khas bunga api HTML5 ini, terutamanya kod HTML, kod CSS dan kod Javascript.

 Kod HTML:

Kod XML/HTMLSalin kandungan ke papan keratan
  1. <div id=”gui”>div>
  2. <div id=”bekas kanvas”> <div id=”gunung2″>div> 
  3. <div id=”gunung1″ >div><div id=”skyline”>div> div>

Struktur HTML adalah sangat mudah, iaitu bekas kanvas dibina dan kami akan menggunakan JS untuk menjana objek Kanvas dalam bekas ini. Anda akan mengetahuinya dengan melihat kod JS akhir.

 Kod CSS:

Kod CSSSalin kandungan ke papan keratan
  1. #kanvas-bekas { latar belakang#000 url(bg.jpg); tinggi400pxkiri: 50%; margin: -200px 0 0 -300pxkedudukanmutlakatas: 50%; lebar600pxz-indeks: 2;   
  2. } kanvas { kursorpalang silangpaparansekatkedudukansaudaraz-indeks: 3;   
  3. } kanvas:aktif { kursorpalang silang;   
  4. #skyline { latar belakangurl (skyline.png) ulang-x 50% 0; bawahbawah: 0; tinggi135pxkiri: 0; kedudukanmutlaklebar: 100%; z-indeks: 1;       
  5. #mountains1 { latar belakangurl (gunung1.png) ulang-x 40% 0; bawahbawah: 0; tinggi200pxkiri: 0; kedudukanmutlaklebar: 100%; z-indeks: 1;       
  6. #mountains2 { latar belakangurl (gunung2.png) ulang-x 30% 0; bawahbawah: 0; tinggi250pxkiri: 0; kedudukanmutlaklebar: 100%; z-indeks: 1;       
  7. #gui { kanankanan: 0; kedudukantetapatas: 0; z-indeks: 3;   
  8. }  

Kod CSS bukanlah sesuatu yang istimewa, ia mentakrifkan warna latar belakang dan sempadan.

Seterusnya ialah kod Javascript yang paling penting.

 Kod JavaScript:

Kod JavaScriptSalin kandungan ke papan keratan
  1. self.init = fungsi(){       
  2.     self.dt = 0;   
  3.         self.oldTime = Date.now();   
  4.         self.canvas = document.createElement('canvas');                   
  5.         self.canvasContainer = $('#canvas-container'); var canvasContainerDisabled = document.getElementById('canvas-container');   
  6.         self.canvas.onselectstart = fungsi() { return false >;   
  7.         };   
  8.   
  9.         self.canvas.width = self.cw = 600;   
  10.         self.canvas.height = self.ch = 400;       
  11.   
  12.         zarah diri = [];       
  13.         self.partCount = 30;   
  14.         bunga api sendiri = [];       
  15.         self.mx = self.cw/2;   
  16.         self.my = self.ch/2;   
  17.         self.currentHue = 170;   
  18.         self.partSpeed = 5;   
  19.         self.partSpeedVariance = 10;   
  20.         self.partWind = 50;   
  21.         self.partFriction = 5;   
  22.         self.partGravity = 1;   
  23.         self.hueMin = 150;   
  24.         self.hueMax = 200;   
  25.         self.fworkSpeed = 2;   
  26.         self.fworkAccel = 4;   
  27.         self.hueVariance = 30;   
  28.         self.flickerDensity = 20;   
  29.         self.showShockwave = palsu;   
  30.         self.showTarget = benar;   
  31.         self.clearAlpha = 25;   
  32.   
  33.         self.canvasContainer.append(self.canvas);   
  34.         self.ctx = self.canvas.getContext('2d');   
  35.         self.ctx.lineCap = 'bulat';   
  36.         self.ctx.lineJoin = 'bulat';   
  37.         self.lineWidth = 1;   
  38.         self.bindEvents();               
  39.         self.canvasLoop();   
  40.   
  41.         self.canvas.onselectstart = fungsi() { return false >;   
  42.         };   
  43.   
  44.     };  

Kod JS ini terutamanya membina objek Kanvas dalam bekas kanvas, dan memulakan penampilan dan sifat animasi objek kanvas.

Kod JavaScriptSalin kandungan ke papan keratan
  1. var Zarah = fungsi(x, y, warna){ ini.x = x; ini.y = y; ini.coordLast = [   
  2.             {x: x, y: y},   
  3.             {x: x, y: y},   
  4.             {x: x, y: y}   
  5.         ]; ini.sudut = rand(0, 360); ini.speed = rand(((self.partSpeed - self.partSpeedVariance) <= 0) ? 1 : self.partSpeed - self.partSpeedVariance, (self.partSpeedVariance bahagianSpeedVariance)); ini.geseran = 1 - diri.partFriction/100; ini.gravity = self.partGravity/2; ini.hue = rand(hue-self.hueVariance, hue self.hueVariance); ini.kecerahan = rand(50, 80); ini.alpha = rand(40,100)/100; ini.pereputan = rand(10, 50)/1000; ini.wind = (rand(0, self.partWind) - (self.partWind/2))/25; ini.lineWidth = self.lineWidth;   
  6.     };   
  7.   
  8.     Particle.prototype.update = fungsi(indeks){ var radian =  ini.sudut * Math.PI / 180; var vx = Math.cos(radians) * ini.speed; var vy = Math.sin(radians) * ini.speed   ini .graviti; ini.kelajuan *= ini.geseran; ini.coordLast[2].x = ini.coordLast[1].x; ini.coordLast[2].y = ini.coordLast[1].y; ini.coordLast[1].x = ini.coordLast[0].x; ini.coordLast[1].y = ini.coordLast[0].y; ini.coordLast[0].x = ini.x; ini.coordLast[0].y = ini.y; ini.x  = vx * self.dt; ini.y  = vy * self.dt; ini.sudut  = ini.angin; ini.alpha -= ini.pereputan; jika(!hitTest(0,0,self.cw,self.ch,ini.x-ini.jejari, ini.y-ini.jejari, ini .jejari*2, ini.jejari*2) |  ini.alpha < ){                       
  9.             self.particles.splice(indeks, 1);       
  10.         }               
  11.     };   
  12.   
  13.     Particle.prototype.draw = fungsi(){ var coordRand = (rand(1,3) -1);   
  14.         self.ctx.beginPath();                                   
  15.         self.ctx.moveTo(Math.round(ini.coordLast[coordRand].x), Math.round(ini.coordLast[coordRand].y));   
  16.         self.ctx.lineTo(Math.round(ini.x), Math.round(ini .y));   
  17.         self.ctx.closePath();                   
  18.         self.ctx.strokeStyle = 'hsla(' ini.hue <🎜 , 100%, ' ini.kecerahan '%, ' ini.alfa ')';   
  19.         self.ctx.stroke(); jika(self.flickerDensity > 0){ var inverseDensity = 50 - self.flickerDensity; jika(rand(0, inverseDensity) === inverseDensity){   
  20.                 self.ctx.beginPath();   
  21.                 self.ctx.arc(Math.round(ini.x), Math.round(ini .y), rand(ini.lineWidth,ini.lineWidth 3)/2, 0, Math.PI*2, palsu)  self.ctx.closePath(); var randAlpha = rand(50,100)/100;   
  22.                 self.ctx.fillStyle = 'hsla(' ini.hue .hue . , 100%, ' ini.kecerahan '%, ' randAlpha ' )';   
  23.                 self.ctx.fill();   
  24.             }       
  25.         }   
  26.     };  
  这段JS代码的功能是实现烟花爆炸后的小颗粒的绘制,从draw方法中可店以,可以,小颗粒的绘制。点,烟花颗粒即可在这个范围的随机点中散落。

Kod JavaScript复制内容到剪贴板
  1. var Bunga api = fungsi(startX, startY, targetX, targetY){ ini.x = startX; ini.y = startY; ini.startX = startX; ini.startY = startY; ini.hitX = salahini.hitY = palsuini.coordLast = [   
  2.             {x: startX, y: startY},   
  3.             {x: startX, y: startY},   
  4.              {x: startX, y: startY}   
  5.         ]; ini.targetX = targetX; ini.targetY = targetY; ini.speed = self.fworkSpeed; ini.angle = Math.atan2(targetY - startY, targetX - startX); ini.shockwaveAngle = Math.atan2(targetY - startY, targetX - startX) (90*(Math.PI/180)); ini.pecutan = self.fworkAccel/100; ini.hue = self.currentHue; ini.kecerahan = rand(50, 80); ini.alpha = rand(50,100)/100; ini.lineWidth = self.lineWidth; ini.targetRadius = 1;   
  6.     };   
  7.   
  8.     Firework.prototype.update = fungsi(indeks){   
  9.         self.ctx.lineWidth = ini.lineWidth;   
  10.   
  11.         vx = Math.cos(ini.sudut) * ini.kelajuan,   
  12.         vy = Math.sin(ini.sudut) * ini.kelajuan; ini.kelajuan *= 1   ini.pecutan; ini.coordLast[2].x = ini.coordLast[1].x; ini.coordLast[2].y = ini.coordLast[1].y; ini.coordLast[1].x = ini.coordLast[0].x; ini.coordLast[1].y = ini.coordLast[0].y; ini.coordLast[0].x = ini.x; ini.coordLast[0].y = ini.y; jika(self.showTarget){ jika(ini.targetRadius < 8){ ini.targetRadius  = .25 * self.dt;   
  13. <🎜>            } lain { ini.targetRadius = 1 * self.dt;       
  14.             }   
  15.         } jika(ini.startX >= iniini 🎜>.targetX){ jika(ini.x   vx <= ini.targetX){ ini.x = ini.targetX; ini.hitX = benar;   
  16.             } lain { ini.x  = vx * self.dt;   
  17.             }   
  18.         } lain { jika(ini.x vx >= ini.targetX){ ini.x = ini .targetX; ini.hitX = benar;   
  19.             } lain { ini.x  = vx * self.dt;   
  20.             }   
  21.         } jika(ini.startY >= ini.targetY){ jika(ini.y   vy <= ini.targetY){ ini.y = ini.targetY; ini.hitY = benar;   
  22.             } 
  23. lain { ini.y  = vy * self.dt;   
  24.             }   
  25.         } 
  26. lain { jika(ini.y vy >= ini.targetY){ ini.y = ini .targetY; ini.hitY = benar;   
  27.             } 
  28. lain { ini.y  = vy * self.dt;   
  29.             }   
  30.         } jika(ini.hitX && ini.hitY){  var randLetupan = rand(0, 9);   
  31.             self.createParticles(ini.targetX, ini.targetY, ini 🎜>.hue);   
  32.             diri.bunga api.splice(indeks, 1);                       
  33.         }   
  34.     };   
  35.   
  36.     Firework.prototype.draw = fungsi(){   
  37.         self.ctx.lineWidth = ini.lineWidth; var coordRand = (rand(1,3)-1);                       
  38.         self.ctx.beginPath();                               
  39.         self.ctx.moveTo(Math.round(ini.coordLast[coordRand].x), Math.round(ini.coordLast[coordRand].y));   
  40.         self.ctx.lineTo(Math.round(ini.x), Math.round(ini .y));   
  41.         self.ctx.closePath();   
  42.         self.ctx.strokeStyle = 'hsla(' ini.hue ini.kecerahan '%, ' ini.alfa ')';   
  43.         self.ctx.stroke(); 
  44. jika(self.showTarget){   
  45.             self.ctx.save();   
  46.             self.ctx.beginPath();   
  47.             self.ctx.arc(Math.round(
  48. ini.targetX), Math.round(ini .targetY), ini.targetRadius, 0, Math.PI*2, false)   
  49.             self.ctx.closePath();   
  50.             self.ctx.lineWidth = 1;   
  51.             self.ctx.stroke();   
  52.             self.ctx.restore();   
  53.         } jika(self.showShockwave){   
  54.             self.ctx.save();   
  55.             self.ctx.translate(Math.round(ini.x), Math.round(ini .y));   
  56.             self.ctx.rotate(ini.shockwaveAngle);   
  57.             self.ctx.beginPath();   
  58.             self.ctx.arc(0, 0, 1*(ini.speed/5), 0, Math.PI,  benar);   
  59.             self.ctx.strokeStyle = 'hsla(' ini.hue '> , 100%, ' ini.kecerahan '%, ' rand(25, 60)/100 ')';   
  60.             self.ctx.lineWidth = ini.lineWidth;   
  61.             self.ctx.stroke();   
  62.             self.ctx.restore();   
  63.         }                                    
  64.     };  

  这段JS代码是创建烟花实例的,我们也可以从draw方法中看出,当我仇為的,我们也可以从draw方法中看出,当我仇為炠时,烟花发射的目的地就在那个点上。

  这款HTML5 Canvas烟花效果的核心代码就是这样,谢谢阅读,希望能帮到大家说家,我们会努力分享更多优秀的文章。

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimanakah saya menggunakan tag meta viewport untuk mengawal skala halaman pada peranti mudah alih? Bagaimanakah saya menggunakan tag meta viewport untuk mengawal skala halaman pada peranti mudah alih? Mar 13, 2025 pm 08:00 PM

Artikel ini membincangkan menggunakan tag meta viewport untuk mengawal skala halaman pada peranti mudah alih, memberi tumpuan kepada tetapan seperti lebar dan skala awal untuk respons dan prestasi optimum.

Bagaimanakah saya mengendalikan privasi dan keizinan lokasi pengguna dengan API Geolokasi? Bagaimanakah saya mengendalikan privasi dan keizinan lokasi pengguna dengan API Geolokasi? Mar 18, 2025 pm 02:16 PM

Artikel ini membincangkan menguruskan privasi dan keizinan lokasi pengguna menggunakan API Geolocation, menekankan amalan terbaik untuk meminta kebenaran, memastikan keselamatan data, dan mematuhi undang -undang privasi.

Bagaimanakah saya menggunakan API Drag dan Drop HTML5 untuk antara muka pengguna interaktif? Bagaimanakah saya menggunakan API Drag dan Drop HTML5 untuk antara muka pengguna interaktif? Mar 18, 2025 pm 02:17 PM

Artikel ini menerangkan cara menggunakan API Drag dan Drop HTML5 untuk mewujudkan antara muka pengguna interaktif, memperincikan langkah -langkah untuk membuat unsur -unsur menyeret, mengendalikan peristiwa utama, dan meningkatkan pengalaman pengguna dengan maklum balas tersuai. Ia juga membincangkan perangkap biasa dengan a

Bagaimanakah saya menggunakan API Penglihatan Halaman Html5 untuk mengesan apabila halaman dapat dilihat? Bagaimanakah saya menggunakan API Penglihatan Halaman Html5 untuk mengesan apabila halaman dapat dilihat? Mar 13, 2025 pm 07:51 PM

Artikel ini membincangkan menggunakan API Penglihatan Halaman HTML5 untuk mengesan penglihatan halaman, meningkatkan pengalaman pengguna, dan mengoptimumkan penggunaan sumber. Aspek utama termasuk berhenti media, mengurangkan beban CPU, dan menguruskan analisis berdasarkan perubahan penglihatan.

Bagaimanakah saya menggunakan API WebSockets HTML5 untuk komunikasi dua arah antara klien dan pelayan? Bagaimanakah saya menggunakan API WebSockets HTML5 untuk komunikasi dua arah antara klien dan pelayan? Mar 12, 2025 pm 03:20 PM

Artikel ini menerangkan API WebSockets HTML5 untuk komunikasi pelayan klien bidirectional masa nyata. Ia memperincikan pelaksanaan klien (JavaScript) dan pelayan (python/flask), menangani cabaran seperti skalabilitas, pengurusan negeri,

Cara Menjalankan Projek H5 Cara Menjalankan Projek H5 Apr 06, 2025 pm 12:21 PM

Menjalankan projek H5 memerlukan langkah -langkah berikut: memasang alat yang diperlukan seperti pelayan web, node.js, alat pembangunan, dan lain -lain. Membina persekitaran pembangunan, membuat folder projek, memulakan projek, dan menulis kod. Mulakan pelayan pembangunan dan jalankan arahan menggunakan baris arahan. Pratonton projek dalam penyemak imbas anda dan masukkan URL Server Pembangunan. Menerbitkan projek, mengoptimumkan kod, menggunakan projek, dan menyediakan konfigurasi pelayan web.

Bagaimana saya menggunakan API Pemberitahuan HTML5 untuk memaparkan pemberitahuan desktop? Bagaimana saya menggunakan API Pemberitahuan HTML5 untuk memaparkan pemberitahuan desktop? Mar 13, 2025 pm 07:57 PM

Artikel ini menerangkan cara menggunakan API Pemberitahuan HTML5 untuk memaparkan pemberitahuan desktop, memberi tumpuan kepada keperluan kebenaran, penyesuaian, dan sokongan penyemak imbas.

Bagaimanakah saya menggunakan pekerja bersama untuk pemprosesan latar belakang bersama di HTML5? Bagaimanakah saya menggunakan pekerja bersama untuk pemprosesan latar belakang bersama di HTML5? Mar 18, 2025 pm 02:06 PM

Artikel ini menerangkan cara menggunakan pekerja bersama di HTML5 untuk pemprosesan latar belakang bersama, perincian persediaan, faedah, kecekapan komunikasi, dan teknik debugging.

See all articles