精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

快過年了,用JS讓你的網(wǎng)頁放煙花吧

開發(fā) 前端
這篇文章看完,保證你在任何平臺,用任何語言都可以寫出來放煙花的效果。

 馬上就要過春節(jié)了,大城市里依然是不準(zhǔn)燃放煙花這種空氣污染的東西的,想念小時候在自家院子里放花的快樂時光,大城市里的小朋友們是體會不到這種快樂了。但作為前端工程師,這難不倒我們,下面就教大家如何用JS在網(wǎng)頁里放煙花。

在 codepen 里搜索 “fireworks” 可以搜到各種使用JS完成的煙花效果。我今天分享的代碼,也是參考自其中一個。

這篇文章看完,保證你在任何平臺,用任何語言都可以寫出來放煙花的效果

如何實現(xiàn)的?

先創(chuàng)建一個Canvas

先新建一個和網(wǎng)頁可視區(qū)大小一樣的canvas,并且通過監(jiān)聽顯示區(qū)的resize事件,來改變canvas的大小。 

  1. var canvas = document.getElementById('myCanvas');  
  2. var context = canvas.getContext('2d');  
  3. function resizeCanvas() {  
  4.     canvas.width = window.innerWidth;  
  5.     canvas.height = window.innerHeight;  
  6.  
  7. function clearCanvas(){  
  8.  context.fillStyle = '#ffffff' 
  9.  context.fillRect(0,0,canvas.width, canvas.height);  
  10.  
  11. window.addEventListener('resize', resizeCanvas, false);  
  12. resizeCanvas(); 

放煙花之前的練習(xí)

煙花都是從一個點爆炸,伴隨著不同的弧度散開,所以我們先繪制幾個小圓點,環(huán)繞著一個圓心。有點像loading的小圈圈。這其實就是煙花最開始的狀態(tài)...

 

  1. function mouseDownHandler(e) {  
  2.     var x = e.clientX;  
  3.     var y = e.clientY;  
  4.     drawFireworks(x,y);  
  5. function drawFireworks(sx,sy) {  
  6.     var count = 10;//煙花粒子數(shù)量  
  7.     var radius = 10;//煙花環(huán)繞半徑  
  8.     for(var i = 0 ;i<count;i++){  
  9.         var angle = 360/count*i;//煙花粒子角度  
  10.         var radians = angle * Math.PI / 180;//煙花粒子弧度  
  11.         var vx = sx+Math.cos(radians) * radius;  
  12.         var vy = sy+Math.sin(radians) * radius;  
  13.         var size = 2 
  14.         context.beginPath();  
  15.         context.arc(vx, vy, size, 0, Math.PI*2, false)  
  16.         context.closePath();  
  17.         context.fillStyle = "#ff0000" 
  18.         context.fill();  
  19.     }  
  20. document.addEventListener('mousedown', mouseDownHandler, false); 

以上代碼的含義大家應(yīng)該都懂對不對?但現(xiàn)在沒有動畫,一點也不像煙花。別著急,我們馬上就讓它們動起來。

動起來

動起來其實就是不斷的去繪制一個值從小變大的圓心半徑...能明白吧,不斷的繪制有兩種方法,setInterval和requestAnimationFrame,兩種方法都可以。

    1.  setInterval

優(yōu)點:可以比較容易的設(shè)定動畫的繪制頻率。 

  1. var radius = 0;//圓心半徑  
  2. function fire(x,y){  
  3.     function tick() {  
  4.         drawFireworks(x,y);//繪制煙花  
  5.         radius++;//半徑不斷變大  
  6.     }  
  7.     setInterval(tick,30);//每30毫秒繪制一次  

    2.  requestAnimationFrame

優(yōu)點:繪制頻率跟瀏覽器畫面的繪制同步。 

  1. var radius = 0 
  2. function fire(x,y){  
  3.     function tick() {  
  4.         drawFireworks(x,y);  
  5.         radius++;  
  6.         requestAnimationFrame(tick);  
  7.     }  
  8.     tick(); 

是不是已經(jīng)有點感覺了?

更像煙花一點

但真實的煙花肯定不會這么聽話,規(guī)規(guī)矩矩的保持弧度和速度,所以我們要加入一些隨機因子。 

  1. var rid;  
  2. function fire(x,y){  
  3.     createFireworks(x,y);  
  4.     function tick() {  
  5.         drawFireworks();  
  6.         rid=requestAnimationFrame(tick);  
  7.     }  
  8.     cancelAnimationFrame(rid); 
  9.     tick();  
  10.  
  11. var particles=[];  
  12. function createFireworks(sx,sy){  
  13.     particles=[];  
  14.     var hue = Math.floor(Math.random()*51)+150;  
  15.     var hueVariance = 30 
  16.     var count = 100 
  17.     for(var i = 0 ;i<count;i++){  
  18.         var p = {};  
  19.         var angle = Math.floor(Math.random()*360);  
  20.         p.radians = angle * Math.PI / 180;  
  21.         p.radius = 0 
  22.         p.sx = sx;  
  23.         p.sy = sy;  
  24.         p.speed = (Math.random()*5)+.4;  
  25.         p.size = Math.floor(Math.random()*3)+1;  
  26.         p.hue = Math.floor(Math.random()*((hue+hueVariance)-(hue-hueVariance)))+(hue-hueVariance);  
  27.         p.brightness = Math.floor(Math.random()*31)+50;  
  28.         p.alpha = (Math.floor(Math.random()*61)+40)/100;  
  29.         particles.push(p);  
  30.     }  
  31.  
  32. function drawFireworks() {  
  33.     clearCanvas();  
  34.     for(var i = 0 ;i<particles.length;i++){  
  35.         var p = particles[i];  
  36.         pp.vx = p.sx+Math.cos(p.radians) * p.radius;  
  37.         pp.vy = p.sy+Math.sin(p.radians) * p.radius;  
  38.         p.radius += 1+p.speed;  
  39.         context.beginPath();  
  40.         context.arc(p.vx, p.vy, p.size, 0, Math.PI*2, false);  
  41.         context.closePath();  
  42.         context.fillStyle = 'hsla('+p.hue+', 100%, '+p.brightness+'%, '+100+')';  
  43.         context.fill();  
  44.     }  

很絢麗的對不對?現(xiàn)在我們再給它加入一點煙霧拖尾的效果~ 

  1. function tick() {  
  2.  //tips:注意新加入的這4行代碼  
  3.  context.globalCompositeOperation = 'destination-out' 
  4.  context.fillStyle = 'rgba(0,0,0,'+10/100+')';  
  5.  context.fillRect(0,0,canvas.width,canvas.height);  
  6.  context.globalCompositeOperation = 'lighter' 
  7.  //tipsend  
  8.  drawFireworks();  
  9.  rid=requestAnimationFrame(tick);  

為了更寫實,我們繼續(xù)升級

現(xiàn)在加入一些重力的影響,讓煙花粒子的移動速度越來越慢并且慢慢下落消失 

  1. var vx = Math.cos(p.radians) * p.radius;  
  2. var vy = Math.sin(p.radians) * p.radius + 0.4;  
  3. p.x += vx;  
  4. p.y += vy;  
  5. p.radius *= 1 - p.speed/100;  
  6. p.alpha -0.005; 

現(xiàn)在這個煙花看起來是不是就很有煙花的感覺了,當(dāng)然各種參數(shù)你還可以更細(xì)致的加入一些變量。比如繪制一個炮竹,從炮竹處向天空發(fā)射。最后才是煙花...這些就交給大家自己去實現(xiàn)吧。

在任意網(wǎng)頁上放煙花

在Chrome里新建一個書簽,復(fù)制以下代碼,粘貼到網(wǎng)址一欄,然后保存。 

  1. javascript:!(function() {var cdom = document.createElement("canvas");cdom.id = "myCanvas";cdom.style.position="fixed";cdom.style.left = "0";cdom.style.top = "0";cdom.style.zIndex=-1;document.body.appendChild(cdom);var canvas = document.getElementById('myCanvas');var context = canvas.getContext('2d');function resizeCanvas() {canvas.width = window.innerWidth;canvas.height = window.innerHeight;}window.addEventListener('resize', resizeCanvas, false);resizeCanvas();clearCanvas();function clearCanvas(){context.fillStyle = '#000000';context.fillRect(0,0,canvas.width, canvas.height);}function mouseDownHandler(e) {var x = e.clientX;var y = e.clientY;fire(x,y);}var rid;function fire(x,y){createFireworks(x,y);function tick() {context.globalCompositeOperation = 'destination-out';    context.fillStyle = 'rgba(0,0,0,'+10/100+')';    context.fillRect(0,0,canvas.width,canvas.height);    context.globalCompositeOperation = 'lighter';drawFireworks();rid=requestAnimationFrame(tick);}cancelAnimationFrame(rid);tick();}var particles=[];function createFireworks(sx,sy){particles=[];var hue = Math.floor(Math.random()*51)+150;var hueVariance = 30;var count = 100;for(var i = 0 ;i<count;i++){var p = {};var angle = Math.floor(Math.random()*360);p.radians = angle * Math.PI / 180;p.x = sx;p.y = sy;p.speed = (Math.random()*5)+.4;pp.radius = p.speed;p.size = Math.floor(Math.random()*3)+1;p.hue = Math.floor(Math.random()*((hue+hueVariance)-(hue-hueVariance)))+(hue-hueVariance);p.brightness = Math.floor(Math.random()*31)+50;p.alpha = (Math.floor(Math.random()*61)+40)/100;particles.push(p);}}function drawFireworks() {clearCanvas();for(var i = 0 ;i<particles.length;i++){var p = particles[i];var vx = Math.cos(p.radians) * p.radius;var vy = Math.sin(p.radians) * p.radius + 0.4;p.x += vx;p.y += vy;p.radius *= 1 - p.speed/100;p.alpha -0.005;context.beginPath();context.arc(p.x, p.y, p.size, 0, Math.PI*2, false);context.closePath();context.fillStyle = 'hsla('+p.hue+', 100%, '+p.brightness+'%, '+p.alpha+')';context.fill();}}document.addEventListener('mousedown', mouseDownHandler, false);})(); 

 

 

責(zé)任編輯:龐桂玉 來源: 前端大全
相關(guān)推薦

2021-01-15 15:51:33

JavaScript開發(fā)技術(shù)

2021-06-29 23:50:39

插件Vscode代碼

2014-12-12 11:12:31

程序員

2021-07-22 10:25:07

JS驗證碼前端

2011-03-31 09:26:15

MySQL擴展性精簡

2017-01-19 15:20:32

遠(yuǎn)程智能蒲公英

2018-05-28 07:27:18

2012-10-24 09:42:27

數(shù)據(jù)安全BYOD云數(shù)據(jù)

2016-11-22 16:34:11

githubgit前端

2011-06-03 14:10:31

SEO網(wǎng)頁摘要

2021-08-02 07:52:26

Windows 11操作系統(tǒng) Linux

2021-08-02 15:30:43

Windows 11Linux

2019-09-17 14:31:52

JSJavaScript前端

2020-05-07 10:18:06

JavaScript前端技術(shù)

2022-01-26 18:46:46

Canvas煙花粒子特效

2021-09-23 05:57:52

Vscode JS 項目

2015-03-17 09:34:57

PHP響應(yīng)式網(wǎng)頁設(shè)計網(wǎng)頁設(shè)計建議

2016-11-29 07:39:18

蘋果iOS科技新聞早報

2012-09-03 09:21:51

2021-01-14 09:59:07

JS代碼編碼
點贊
收藏

51CTO技術(shù)棧公眾號

女同性恋一区二区三区| 久久精品无码中文字幕| 91在线视频国产| 激情欧美亚洲| 亚洲午夜av久久乱码| 三级黄色片播放| 夜鲁夜鲁夜鲁视频在线播放| 国产精品国产三级国产aⅴ中文| 999在线观看免费大全电视剧| 国产精品久久久久久99| 国产在视频线精品视频www666| 欧美精品三级日韩久久| heyzo国产| 国产福利视频在线观看| 久久午夜老司机| 99九九视频| 中文字幕人妻一区二区在线视频| 韩日精品视频| 久久亚洲私人国产精品va| 中出视频在线观看| 一区二区三区在线资源| 欧洲生活片亚洲生活在线观看| 亚洲熟妇无码av在线播放| 成人好色电影| 91麻豆福利精品推荐| 亚洲精品日韩av| 中文字幕乱码中文字幕| 久久久久久久波多野高潮日日| 九九九久久久久久| 久久成人小视频| 日韩成人激情| 亚洲日本欧美中文幕| 国产精品无码网站| 国产91精品入| 日韩精品一区国产麻豆| 超碰在线超碰在线| 国产一区高清| 欧美午夜不卡在线观看免费| 久久久噜噜噜www成人网| 福利成人导航| 一二三四社区欧美黄| 99亚洲国产精品| 黄色网页在线播放| 日韩一区欧美一区| 亚洲高清视频一区| 中文字幕在线免费| 欧美国产精品中文字幕| 日韩理论片在线观看| 青青草手机在线| 99久久精品免费看国产| 国产日韩久久| 天天影院图片亚洲| wwwwxxxxx欧美| 快播亚洲色图| 国产中文在线视频| 国产日产欧美一区| 亚洲精品美女久久7777777| h视频在线播放| 中文字幕av在线一区二区三区| 日韩一区不卡| 午夜视频在线看| 中文字幕一区二| 久久久久久久久影视| 伊人福利在线| 精品久久久久久国产91| 久久网站免费视频| julia一区二区三区中文字幕| 欧美在线播放高清精品| 午夜在线观看av| 在线欧美激情| 亚洲福利在线视频| 少妇按摩一区二区三区| 日本一区二区免费高清| 久久视频这里只有精品| 久久久综合久久久| 亚洲影视综合| 国产欧美精品在线播放| 国产肥老妇视频| av不卡一区二区三区| 欧美日韩在线高清| 国产1区在线| 红桃av永久久久| 少妇一级淫免费放| 日韩一区二区三区在线看| 亚洲国产精品人久久电影| 自拍偷拍视频亚洲| 欧美a级在线| 人体精品一二三区| 99久久精品日本一区二区免费| 成人网在线播放| 日韩经典在线视频| 欧美wwww| 欧美午夜在线一二页| 日本人妻一区二区三区| 蜜臀av免费一区二区三区| 一区二区三区视频免费在线观看 | 91在线观看地址| 天堂一区二区三区| 成人影院在线播放| 欧美四级电影在线观看| 国产伦精品一区二区三区88av| 中文字幕av一区二区三区人| 成人97在线观看视频| 国产无遮挡呻吟娇喘视频| 国产麻豆精品theporn| 日本一区不卡| 99在线视频影院| 欧美夫妻性生活| 波多野结衣办公室33分钟| 欧美伊人久久| 国产日韩欧美视频| 黄色免费在线播放| 午夜视频在线观看一区二区| 不用播放器的免费av| 国产99久久久国产精品成人免费| 色综合久久久888| 亚洲天堂手机版| 久久免费午夜影院| 日本a在线免费观看| 精品欧美视频| 色婷婷综合久久久久| 国产精品xxxx喷水欧美| 国产91富婆露脸刺激对白| 亚洲免费久久| 性高爱久久久久久久久| 亚洲高清在线观看| 久久97人妻无码一区二区三区| 久热成人在线视频| 日本精品一区二区三区视频| 亚洲少妇视频| 亚洲黄色片网站| 国产性一乱一性一伧一色| 韩日av一区二区| 亚洲一区免费看| 午夜av成人| 国产一区二区三区丝袜| 东京热一区二区三区四区| 91在线观看免费视频| 国产精品专区在线| 久久久久久毛片免费看 | 性欧美freehd18| 亚洲精品资源美女情侣酒店| 国产专区第一页| 91捆绑美女网站| 99久久久无码国产精品6| 欧美黑白配在线| 5278欧美一区二区三区| 艳母动漫在线看| 欧美日韩中文字幕日韩欧美| 野花社区视频在线观看| 奶水喷射视频一区| 欧美精品尤物在线| 亚洲wwww| 色999日韩欧美国产| 91 中文字幕| 一区二区三区在线观看欧美| 国产高清av片| 国内精品嫩模av私拍在线观看| 超碰97在线资源| 91老司机福利在线| 精品调教chinesegay| 国产伦精品一区二区三区视频网站| 久久久天堂av| 日韩欧美国产片| 中文字幕午夜精品一区二区三区| wwwxx欧美| 美女91在线看| 日日骚av一区| www.色视频| 欧美日韩性视频在线| www.av天天| 国产综合色产在线精品| 一卡二卡三卡视频| 九九久久成人| 91在线网站视频| 蜜桃视频m3u8在线观看| 在线看欧美日韩| xxxwww在线观看| 日韩欧美黄色动漫| 99久久久免费精品| 不卡一区二区三区四区| 久久综合久久色| 欧美日韩一区二区国产| 欧美日韩国产不卡在线看| 一区二区三区无毛| 91国内揄拍国内精品对白| 2021av在线| 亚洲精品国产综合久久| 在线播放一级片| 亚洲大片免费看| 三级黄色片在线观看| www.性欧美| 国产欧美一区二| 久久精品欧洲| 真实国产乱子伦对白视频| 美女毛片一区二区三区四区最新中文字幕亚洲 | 一区二区三区四区在线视频| 牛牛影视久久网| 成人av番号网| 激情都市亚洲| 久久久久五月天| 成人三级网址| 亚洲日本中文字幕| 日本高清视频免费看| 欧美日韩免费观看一区三区| 久久99精品波多结衣一区| 亚洲免费在线看| 中文字幕第二区| 91尤物视频在线观看| 99久久综合网| 另类小说一区二区三区| 人妻内射一区二区在线视频 | 日韩三级av| 成人午夜电影免费在线观看| 日韩精品一级毛片在线播放| 国产成人精品电影久久久| 久草在线视频福利| 久久av.com| 看黄网站在线| 最近2019好看的中文字幕免费 | jizz性欧美2| 成人做爰www免费看视频网站| 色婷婷综合久久久中字幕精品久久| 欧美激情亚洲自拍| 性xxxfreexxxx性欧美| www日韩中文字幕在线看| 国产一二三区在线视频| 亚洲精品一区二三区不卡| 日韩一区二区三区不卡| 精品欧美一区二区三区精品久久| 国产精品色综合| 欧美日本精品一区二区三区| wwwwww在线观看| 91久久精品一区二区三| 中文字幕亚洲乱码熟女1区2区| 香蕉成人伊视频在线观看| 国产在线观看成人| 亚洲午夜成aⅴ人片| 久久久久久欧美精品se一二三四| 亚洲精品久久嫩草网站秘色| www.超碰在线观看| 亚洲精品中文在线观看| 免费一级肉体全黄毛片| 亚洲精品国产高清久久伦理二区| 在线免费观看亚洲视频| 玉米视频成人免费看| 久久国产露脸精品国产| 一区二区三区中文在线观看| 妺妺窝人体色www婷婷| 亚洲资源中文字幕| 久久高清免费视频| 精品毛片一区二区三区| 黄色小说在线播放| 欧美一区二区三区色| 国产日韩一级片| 日韩丝袜情趣美女图片| www.桃色av嫩草.com| 日韩欧美国产精品一区| 高清国产mv在线观看| 亚洲第一福利视频| 日韩私人影院| 在线不卡国产精品| 国产视频一区二区| 欧美激情影音先锋| 亚洲十八**毛片| 国产精自产拍久久久久久蜜| 亚洲午夜剧场| 国产精品成人一区二区三区| 香蕉久久精品| 神马影院我不卡午夜| 香蕉久久网站| 丰满少妇大力进入| 三级欧美韩日大片在线看| 日韩福利视频在线| 久久国产精品区| 亚洲国产精品狼友在线观看| 久久夜色精品国产噜噜av| 大吊一区二区三区| 一区二区欧美在线观看| 亚洲av中文无码乱人伦在线视色| 欧美手机在线视频| 国产综合视频在线| 亚洲天堂av电影| h片在线观看网站| 3344国产精品免费看| 日韩一级视频| 精选一区二区三区四区五区| 日韩精品久久| 水蜜桃色314在线观看| 久久91精品久久久久久秒播| 国产草草浮力影院| 亚洲欧洲精品天堂一级| 天天操中文字幕| 日韩欧美www| 国产youjizz在线| 欧美激情一区二区三区久久久 | 亚洲影视在线播放| 国产美女www| 精品成人一区二区三区四区| 国产裸舞福利在线视频合集| 久久免费观看视频| 日韩色性视频| 蜜桃网站成人| 亚洲先锋成人| 天天干天天玩天天操| 91麻豆免费看| 久久婷婷一区二区| 欧美精品少妇一区二区三区| 免费一级在线观看播放网址| 欧美激情第三页| 岛国一区二区| 日本一区不卡| 美女诱惑黄网站一区| 在线观看一区二区三区四区| 中文字幕在线不卡| 无码人妻丰满熟妇精品区| 亚洲第一精品电影| 欧美草逼视频| 亚洲一区二区三区四区视频| 日韩精品网站| 国产欧美高清在线| 99在线精品视频| 国产精品自拍视频一区| 日韩午夜av电影| 主播国产精品| 91美女高潮出水| 99久久99久久精品国产片桃花| 国产1区2区在线| 91香蕉视频在线| 日韩欧美高清在线观看| 精品国产污网站| 亚洲91av| 97影院在线午夜| 亚洲欧美综合久久久| 做a视频在线观看| 亚洲丝袜精品丝袜在线| 中文字幕免费观看视频| 中文字幕精品—区二区| 欧洲精品一区二区三区| 日本欧美色综合网站免费| 天堂久久一区二区三区| 91网站免费入口| 色婷婷综合久久久久中文| 蜜桃视频在线免费| 国产精品电影一区| 欧美一区二区三| 中文字幕永久有效| 日韩毛片在线免费观看| 国产色片在线观看| 欧美精品在线第一页| 亚洲1区在线观看| 国产九色porny| jvid福利写真一区二区三区| 伊人手机在线视频| 亚洲午夜精品久久久久久久久久久久| 二吊插入一穴一区二区| 一本色道久久综合亚洲二区三区| 精品一区在线看| 69xx绿帽三人行| 亚洲国产欧美一区二区三区久久| 麻豆mv在线看| 亚洲成人自拍视频| 国产一二精品视频| 麻豆视频在线观看| 精品调教chinesegay| 成人在线视频观看| 公共露出暴露狂另类av| 成人一区在线观看| jizz国产在线观看| 日韩中文理论片| 成人资源在线| 日韩欧美xxxx| 亚洲激情综合网| 日本v片在线免费观看| 国产精品视频资源| 国语自产精品视频在线看8查询8| 黄色污在线观看| 欧美亚洲综合网| 日韩精品分区| 日本成人黄色免费看| 激情丁香综合五月| 欧美bbbbbbbbbbbb精品| 最近2019年手机中文字幕| 超碰97久久| 国产区二区三区| 亚洲一区二区欧美| 成人性爱视频在线观看| 亚洲最大的网站| 日韩综合小视频| 久一视频在线观看| 一区二区三区无码高清视频| 中文一区二区三区四区| 国产精品免费成人| 一区二区三区四区亚洲| 成人动漫在线播放| 国产无套精品一区二区| 麻豆精品一区二区三区| 欧美一级视频免费观看| 久久久999国产| 精品一区二区三区中文字幕老牛|