婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > HTML5 Canvas實現煙花綻放特效

HTML5 Canvas實現煙花綻放特效

熱門標簽:阜陽企業外呼系統 呼和浩特外呼電銷系統排名 南通數據外呼系統推廣 外呼線穩定線路 邢臺縣地圖標注app pageadm實現地圖標注 外呼系統電話怎么投訴 地圖標注位置能賺錢嗎 申請400電話流程簡介

本文為大家帶來了一款,免費而又安全環保的HTML5 Canvas實現的放煙花特效。

效果如下:

代碼如下:

XML/HTML Code復制內容到剪貼板
  1. <!DOCTYPE HTML>  
  2. <html>  
  3.   <head>  
  4.     <title>Canvas 實現放煙花特效</title>  
  5.  <meta charset="utf-8">  
  6.     <meta http-equiv="X-UA-Compatible" content="IE=edge">  
  7.     <meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0,user-scalable=no">  
  8.     <style type="text/css">  
  9.   html,body{height:100%;margin:0;padding:0}   
  10.   ul,li{text-indent:0;text-decoration:none;margin:0;padding:0}   
  11.   img{border:0}   
  12.   body{background-color:#000;color:#999;font:100%/18px helvetica, arial, sans-serif}   
  13.   canvas{cursor:crosshair;display:block;left:0;position:absolute;top:0;z-index:20}   
  14.   #header img{width:100%; height:20%;}   
  15.   #bg img{width:100%; height:80%;}   
  16.   #header,#bg{position:fixed;left:0;right:0;z-index:10}   
  17.   #header{top:0}   
  18.   #bg{position:fixed;z-index:1;bottom:0}   
  19.   audio{position:fixed;display:none;bottom:0;left:0;right:0;width:100%;z-index:5}   
  20.  </style>  
  21.   </head>  
  22.   <body>  
  23.  <div id="bg">  
  24.   <img id="bgimg" src="http://img.ivsky.com/img/tupian/pre/201508/02/yuzhou_xingkong_yu_yueliang-006.jpg">  
  25.  </div>  
  26.  <script src="http://cdn.bootcss.com/jquery/2.2.0/jquery.min.js"></script>  
  27.  <script>  
  28.   $(function(){   
  29.    var Fireworks = function(){   
  30.     var self = this;   
  31.     // 產生煙花隨機數   
  32.     var rand = function(rMi, rMa){   
  33.      //按位取反運算符   
  34.      return ~~((Math.random()*(rMa-rMi+1))+rMi);   
  35.     },hitTest = function(x1, y1, w1, h1, x2, y2, w2, h2){   
  36.      return !(x1 + w1 < x2 || x2 + w2 < x1 || y1 + h1 < y2 || y2 + h2 < y1);   
  37.     };   
  38.     //請求動畫幀   
  39.     window.requestAnimFrame=function(){   
  40.      return window.requestAnimationFrame   
  41.       ||window.webkitRequestAnimationFrame   
  42.       ||window.mozRequestAnimationFrame   
  43.       ||window.oRequestAnimationFrame   
  44.       ||window.msRequestAnimationFrame   
  45.       ||function(callback){   
  46.        window.setTimeout(callback,1000/60);   
  47.       }   
  48.     }();   
  49.     self.init = function(){    
  50.      self.canvas = document.createElement('canvas');     
  51.      //canvas 全屏   
  52.      selfself.canvas.width = self.cw = $(window).innerWidth();   
  53.      selfself.canvas.height = self.ch = $(window).innerHeight();     
  54.      self.particles = [];    
  55.      self.partCount = 150;   
  56.      self.fireworks = [];    
  57.      selfself.mx = self.cw/2;   
  58.      selfself.my = self.ch/2;   
  59.      self.currentHue = 30;   
  60.      self.partSpeed = 5;   
  61.      self.partSpeedVariance = 10;   
  62.      self.partWind = 50;   
  63.      self.partFriction = 5;   
  64.      self.partGravity = 1;   
  65.      self.hueMin = 0;   
  66.      self.hueMax = 360;   
  67.      self.fworkSpeed = 4;   
  68.      self.fworkAccel = 10;   
  69.      self.hueVariance = 30;   
  70.      self.flickerDensity = 25;   
  71.      self.showShockwave = true;   
  72.      self.showTarget = false;   
  73.      self.clearAlpha = 25;   
  74.      $(document.body).append(self.canvas);   
  75.      selfself.ctx = self.canvas.getContext('2d');   
  76.      self.ctx.lineCap = 'round';   
  77.      self.ctx.lineJoin = 'round';   
  78.      self.lineWidth = 1;   
  79.      self.bindEvents();      
  80.      self.canvasLoop();   
  81.      self.canvas.onselectstart = function() {   
  82.       return false;   
  83.      };   
  84.     };     
  85.     // 創建粒子   
  86.     self.createParticles = function(x,y, hue){   
  87.      var countdown = self.partCount;   
  88.      while(countdown--){   
  89.       var newParticle = {   
  90.        x: x,   
  91.        y: y,   
  92.        coordLast: [   
  93.         {x: x, y: y},   
  94.         {x: x, y: y},   
  95.         {x: x, y: y}   
  96.        ],   
  97.        angle: rand(0, 360),   
  98.        speed: rand(((self.partSpeed - self.partSpeedVariance) <= 0) ? 1 : self.partSpeed - self.partSpeedVariance, (self.partSpeed + self.partSpeedVariance)),   
  99.        friction: 1 - self.partFriction/100,   
  100.        gravity: self.partGravity/2,   
  101.        hue: rand(hue-self.hueVariance, hue+self.hueVariance),   
  102.        brightness: rand(50, 80),   
  103.        alpha: rand(40,100)/100,   
  104.        decay: rand(10, 50)/1000,   
  105.        wind: (rand(0, self.partWind) - (self.partWind/2))/25,   
  106.        lineWidth: self.lineWidth   
  107.       };       
  108.       self.particles.push(newParticle);   
  109.      }   
  110.     };   
  111.     // 更新粒子   
  112.     self.updateParticles = function(){   
  113.      var i = self.particles.length;   
  114.      while(i--){   
  115.       var p = self.particles[i];   
  116.       var radians = p.angle * Math.PI / 180;   
  117.       var vx = Math.cos(radians) * p.speed;   
  118.       var vy = Math.sin(radians) * p.speed;   
  119.       p.speed *= p.friction;   
  120.       p.coordLast[2].x = p.coordLast[1].x;   
  121.       p.coordLast[2].y = p.coordLast[1].y;   
  122.       p.coordLast[1].x = p.coordLast[0].x;   
  123.       p.coordLast[1].y = p.coordLast[0].y;   
  124.       p.coordLast[0].x = p.x;   
  125.       p.coordLast[0].y = p.y;   
  126.       p.x += vx;   
  127.       p.y += vy;   
  128.       p.y += p.gravity;   
  129.       p.angle += p.wind;       
  130.       p.alpha -p.decay;   
  131.       if(!hitTest(0,0,self.cw,self.ch,p.x-p.radius, p.y-p.radius, p.radius*2, p.radius*2) || p.alpha < .05){        
  132.        self.particles.splice(i, 1);    
  133.       }   
  134.      };   
  135.     };   
  136.     // 繪制粒子   
  137.     self.drawParticles = function(){   
  138.      var i = self.particles.length;   
  139.      while(i--){   
  140.       var p = self.particles[i];          
  141.       var coordRand = (rand(1,3)-1);   
  142.       self.ctx.beginPath();           
  143.       self.ctx.moveTo(Math.round(p.coordLast[coordRand].x), Math.round(p.coordLast[coordRand].y));   
  144.       self.ctx.lineTo(Math.round(p.x), Math.round(p.y));   
  145.       self.ctx.closePath();       
  146.       self.ctx.strokeStyle = 'hsla('+p.hue+', 100%, '+p.brightness+'%, '+p.alpha+')';   
  147.       self.ctx.stroke();       
  148.       if(self.flickerDensity > 0){   
  149.        var inverseDensity = 50 - self.flickerDensity;        
  150.        if(rand(0, inverseDensity) === inverseDensity){   
  151.         self.ctx.beginPath();   
  152.         self.ctx.arc(Math.round(p.x), Math.round(p.y), rand(p.lineWidth,p.lineWidth+3)/2, 0, Math.PI*2, false)   
  153.         self.ctx.closePath();   
  154.         var randrandAlpha = rand(50,100)/100;   
  155.         self.ctx.fillStyle = 'hsla('+p.hue+', 100%, '+p.brightness+'%, '+randAlpha+')';   
  156.         self.ctx.fill();   
  157.        }    
  158.       }   
  159.      };   
  160.     };   
  161.     // 創建煙花       
  162.     self.createFireworks = function(startX, startY, targetX, targetY){   
  163.      var newFirework = {   
  164.       x: startX,   
  165.       y: startY,   
  166.       startX: startX,   
  167.       startY: startY,   
  168.       hitX: false,   
  169.       hitY: false,   
  170.       coordLast: [   
  171.        {x: startX, y: startY},   
  172.        {x: startX, y: startY},   
  173.        {x: startX, y: startY}   
  174.       ],   
  175.       targetX: targetX,   
  176.       targetY: targetY,   
  177.       speed: self.fworkSpeed,   
  178.       angle: Math.atan2(targetY - startY, targetX - startX),   
  179.       shockwaveAngle: Math.atan2(targetY - startY, targetX - startX)+(90*(Math.PI/180)),   
  180.       acceleration: self.fworkAccel/100,   
  181.       hue: self.currentHue,   
  182.       brightness: rand(50, 80),   
  183.       alpha: rand(50,100)/100,   
  184.       lineWidth: self.lineWidth   
  185.      };      
  186.      self.fireworks.push(newFirework);   
  187.     };   
  188.     // 更新煙花   
  189.     self.updateFireworks = function(){   
  190.      var i = self.fireworks.length;   
  191.      while(i--){   
  192.       var f = self.fireworks[i];   
  193.       self.ctx.lineWidth = f.lineWidth;   
  194.       vx = Math.cos(f.angle) * f.speed,   
  195.       vy = Math.sin(f.angle) * f.speed;   
  196.       f.speed *= 1 + f.acceleration;       
  197.       f.coordLast[2].x = f.coordLast[1].x;   
  198.       f.coordLast[2].y = f.coordLast[1].y;   
  199.       f.coordLast[1].x = f.coordLast[0].x;   
  200.       f.coordLast[1].y = f.coordLast[0].y;   
  201.       f.coordLast[0].x = f.x;   
  202.       f.coordLast[0].y = f.y;   
  203.       if(f.startX >= f.targetX){   
  204.        if(f.x + vx <= f.targetX){   
  205.         ff.x = f.targetX;   
  206.         f.hitX = true;   
  207.        } else {   
  208.         f.x += vx;   
  209.        }   
  210.       } else {   
  211.        if(f.x + vx >= f.targetX){   
  212.         ff.x = f.targetX;   
  213.         f.hitX = true;   
  214.        } else {   
  215.         f.x += vx;   
  216.        }   
  217.       }   
  218.       if(f.startY >= f.targetY){   
  219.        if(f.y + vy <= f.targetY){   
  220.         ff.y = f.targetY;   
  221.         f.hitY = true;   
  222.        } else {   
  223.         f.y += vy;   
  224.        }   
  225.       } else {   
  226.        if(f.y + vy >= f.targetY){   
  227.         ff.y = f.targetY;   
  228.         f.hitY = true;   
  229.        } else {   
  230.         f.y += vy;   
  231.        }   
  232.       }       
  233.       if(f.hitX && f.hitY){   
  234.        self.createParticles(f.targetX, f.targetY, f.hue);   
  235.        self.fireworks.splice(i, 1);   
  236.       }   
  237.      };   
  238.     };   
  239.     // 繪制煙花   
  240.     self.drawFireworks = function(){   
  241.      var i = self.fireworks.length;   
  242.      self.ctx.globalCompositeOperation = 'lighter';   
  243.      while(i--){   
  244.       var f = self.fireworks[i];     
  245.       self.ctx.lineWidth = f.lineWidth;   
  246.       var coordRand = (rand(1,3)-1);        
  247.       self.ctx.beginPath();          
  248.       self.ctx.moveTo(Math.round(f.coordLast[coordRand].x), Math.round(f.coordLast[coordRand].y));   
  249.       self.ctx.lineTo(Math.round(f.x), Math.round(f.y));   
  250.       self.ctx.closePath();   
  251.       self.ctx.strokeStyle = 'hsla('+f.hue+', 100%, '+f.brightness+'%, '+f.alpha+')';   
  252.       self.ctx.stroke();    
  253.       if(self.showTarget){   
  254.        self.ctx.save();   
  255.        self.ctx.beginPath();   
  256.        self.ctx.arc(Math.round(f.targetX), Math.round(f.targetY), rand(1,8), 0, Math.PI*2, false)   
  257.        self.ctx.closePath();   
  258.        self.ctx.lineWidth = 1;   
  259.        self.ctx.stroke();   
  260.        self.ctx.restore();   
  261.       }   
  262.       if(self.showShockwave){   
  263.        self.ctx.save();   
  264.        self.ctx.translate(Math.round(f.x), Math.round(f.y));   
  265.        self.ctx.rotate(f.shockwaveAngle);   
  266.        self.ctx.beginPath();   
  267.        self.ctx.arc(0, 0, 1*(f.speed/5), 0, Math.PI, true);   
  268.        self.ctx.strokeStyle = 'hsla('+f.hue+', 100%, '+f.brightness+'%, '+rand(25, 60)/100+')';   
  269.        self.ctx.lineWidth = f.lineWidth;   
  270.        self.ctx.stroke();   
  271.        self.ctx.restore();   
  272.       }   
  273.      };   
  274.     };   
  275.     // 綁定事件   
  276.     self.bindEvents = function(){   
  277.      $(window).on('resize', function(){      
  278.       clearTimeout(self.timeout);   
  279.       self.timeout = setTimeout(function() {   
  280.        selfself.canvas.width = self.cw = $(window).innerWidth();   
  281.        selfself.canvas.height = self.ch = $(window).innerHeight();   
  282.        self.ctx.lineCap = 'round';   
  283.        self.ctx.lineJoin = 'round';   
  284.       }, 100);   
  285.      });   
  286.      $(self.canvas).on('mousedown', function(e){   
  287.       self.mx = e.pageX - self.canvas.offsetLeft;   
  288.       self.my = e.pageY - self.canvas.offsetTop;   
  289.       self.currentHue = rand(self.hueMin, self.hueMax);   
  290.       self.createFireworks(self.cw/2, self.ch, self.mx, self.my);    
  291.       $(self.canvas).on('mousemove.fireworks', function(e){   
  292.        self.mx = e.pageX - self.canvas.offsetLeft;   
  293.        self.my = e.pageY - self.canvas.offsetTop;   
  294.        self.currentHue = rand(self.hueMin, self.hueMax);   
  295.        self.createFireworks(self.cw/2, self.ch, self.mx, self.my);            
  296.       });       
  297.      });   
  298.      $(self.canvas).on('mouseup', function(e){   
  299.       $(self.canvas).off('mousemove.fireworks');            
  300.      });   
  301.     };   
  302.     self.clear = function(){   
  303.      self.particles = [];   
  304.      self.fireworks = [];   
  305.      self.ctx.clearRect(0, 0, self.cw, self.ch);   
  306.     };   
  307.     self.canvasLoop = function(){   
  308.      requestAnimFrame(self.canvasLoop, self.canvas);      
  309.      self.ctx.globalCompositeOperation = 'destination-out';   
  310.      self.ctx.fillStyle = 'rgba(0,0,0,'+self.clearAlpha/100+')';   
  311.      self.ctx.fillRect(0,0,self.cw,self.ch);   
  312.      self.updateFireworks();   
  313.      self.updateParticles();   
  314.      self.drawFireworks();      
  315.      self.drawParticles();   
  316.     };   
  317.     self.init();     
  318.    }   
  319.    var fworks = new Fireworks();   
  320.    $('#info-toggle').on('click', function(e){   
  321.     $('#info-inner').stop(false, true).slideToggle(100);   
  322.     e.preventDefault();   
  323.    });    
  324.   });   
  325.  </script>  
  326.  <canvas width="1400" height="449"></canvas>  
  327.   </body>  
  328. </html>  

是不是被HTML5強大的效果驚呆了,一飽眼福了吧。

標簽:內蒙古 鶴崗 德州 蚌埠 撫順 楊凌 黃山 辛集

巨人網絡通訊聲明:本文標題《HTML5 Canvas實現煙花綻放特效》,本文關鍵詞  HTML5,Canvas,實現,煙花,綻放,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《HTML5 Canvas實現煙花綻放特效》相關的同類信息!
  • 本頁收集關于HTML5 Canvas實現煙花綻放特效的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩欧美的一区| 99re免费视频精品全部| 亚洲日本va午夜在线影院| 日韩免费看网站| 欧美日韩高清影院| 欧美日韩亚洲国产综合| 91亚洲精品乱码久久久久久蜜桃| 国产精品 欧美精品| 国产成人亚洲综合a∨猫咪| 国产成人一级电影| 成人动漫精品一区二区| 成人app下载| 日本久久一区二区| 在线观看欧美精品| 欧美伊人精品成人久久综合97 | 国产欧美精品区一区二区三区| 日韩欧美一二三| 久久品道一品道久久精品| 久久亚洲私人国产精品va媚药| 久久一区二区三区国产精品| 国产精品日韩精品欧美在线| 日韩一区中文字幕| 亚洲一区二区黄色| 青青草国产成人av片免费| 久久99热国产| www.日韩大片| 欧美日韩国产成人在线91| 欧美一区二区视频免费观看| 久久无码av三级| 亚洲欧美电影院| 日韩精品成人一区二区三区| 久久成人羞羞网站| 91在线无精精品入口| 欧美日本国产视频| 久久精品一区二区三区四区| 中文字幕佐山爱一区二区免费| 亚洲午夜精品网| 极品尤物av久久免费看| av中文字幕不卡| 欧美久久久久免费| 国产日本一区二区| 亚洲国产成人porn| 国产不卡视频一区| 4438x亚洲最大成人网| 国产精品九色蝌蚪自拍| 午夜激情久久久| 不卡一区二区在线| 欧美大胆人体bbbb| 亚洲国产成人av网| 在线欧美日韩国产| 亚洲国产高清aⅴ视频| 五月天视频一区| 国产99久久久精品| 精品久久一区二区| 亚洲国产综合在线| 91在线无精精品入口| 26uuu久久天堂性欧美| 亚洲不卡一区二区三区| 92精品国产成人观看免费| 精品国产免费人成在线观看| 亚洲综合激情另类小说区| 风流少妇一区二区| 欧美大胆人体bbbb| 男人的天堂亚洲一区| 欧美日韩视频第一区| 亚洲视频 欧洲视频| 成人精品小蝌蚪| 久久尤物电影视频在线观看| 免费在线视频一区| 欧美老年两性高潮| 亚洲bt欧美bt精品| 欧美午夜精品一区| 一片黄亚洲嫩模| 色系网站成人免费| 亚洲在线视频网站| 在线日韩一区二区| 一区二区三区精品久久久| 99久久久精品| 亚洲免费色视频| 成人免费在线视频| 99久久精品免费| 亚洲欧洲精品一区二区三区| www.欧美色图| 亚洲视频综合在线| 色偷偷久久一区二区三区| 亚洲精品日日夜夜| 欧美日韩dvd在线观看| 免费欧美在线视频| 久久亚洲一级片| 北条麻妃国产九九精品视频| 中文字幕一区二区5566日韩| 在线观看91视频| 三级久久三级久久久| 精品毛片乱码1区2区3区| 国产一区二区三区免费| 欧美国产国产综合| 色婷婷精品久久二区二区蜜臂av| 亚洲一区二区视频| 日韩美女视频在线| 成人黄色国产精品网站大全在线免费观看 | 粉嫩在线一区二区三区视频| 国产农村妇女精品| 91国偷自产一区二区开放时间| 五月天一区二区三区| 精品国产一区二区三区久久久蜜月 | 国产又粗又猛又爽又黄91精品| 久久久蜜桃精品| 9i在线看片成人免费| 日韩中文字幕1| 久久精品亚洲一区二区三区浴池| 91麻豆文化传媒在线观看| 午夜精品久久久久久久| 欧美国产1区2区| 欧美色图免费看| 国产精品一线二线三线| 亚洲综合一区在线| 久久一夜天堂av一区二区三区| 在线观看欧美日本| 成人精品在线视频观看| 奇米色777欧美一区二区| 国产精品伦一区| 日韩一级黄色大片| 99久久免费精品高清特色大片| 日一区二区三区| 亚洲免费观看高清在线观看| 精品久久久久久无| 欧美色网一区二区| 成人短视频下载| 美美哒免费高清在线观看视频一区二区| 国产欧美一区二区精品婷婷| 欧美精品一卡二卡| 欧美中文字幕一二三区视频| 国产盗摄精品一区二区三区在线 | 天堂资源在线中文精品| 国产精品久久久久久久久快鸭 | 成人激情动漫在线观看| 琪琪久久久久日韩精品| 亚洲国产视频一区| 国产精品久久久久久久浪潮网站| 日韩免费一区二区三区在线播放| 欧美日韩一级二级三级| 91免费观看国产| 成人av午夜电影| 国产精品系列在线播放| 韩国v欧美v日本v亚洲v| 美女被吸乳得到大胸91| 美女视频一区在线观看| 婷婷久久综合九色综合绿巨人| 亚洲午夜免费电影| 污片在线观看一区二区| 亚洲妇熟xx妇色黄| 亚洲午夜精品在线| 亚洲国产日产av| 亚洲国产综合人成综合网站| 亚洲成人在线观看视频| 亚洲高清三级视频| 日韩在线卡一卡二| 青青草原综合久久大伊人精品优势| 亚洲成人av免费| 日本欧美肥老太交大片| 久久精品国产一区二区三区免费看 | 91在线视频免费91| 中文字幕的久久| 国产精品国产三级国产aⅴ入口 | 一区二区三区免费在线观看| 亚洲精选视频在线| 亚洲国产精品人人做人人爽| 五月婷婷激情综合| 国产麻豆日韩欧美久久| 成人高清视频免费观看| 91国内精品野花午夜精品| 91精品国产一区二区三区香蕉| 91精品久久久久久久91蜜桃| 日韩免费一区二区| 中文在线一区二区| 一区二区视频在线看| 天堂在线亚洲视频| 韩国在线一区二区| 不卡的av网站| 精品1区2区3区| 亚洲精品在线三区| 中文字幕一区二区不卡| 肉丝袜脚交视频一区二区| 国产麻豆成人传媒免费观看| 91首页免费视频| 欧美mv日韩mv| 一区二区三区在线免费观看| 麻豆精品精品国产自在97香蕉 | 国产精品一色哟哟哟| 色婷婷精品久久二区二区蜜臂av| 日韩欧美激情四射| 亚洲日本丝袜连裤袜办公室| 久久精品国产网站| 欧美在线观看一区| 国产日产欧美一区| 青青草97国产精品免费观看 | 蜜桃一区二区三区在线观看| 99久久伊人网影院| 久久影院电视剧免费观看| 亚洲成人免费在线|