iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >HTML5和Canvas怎么实现烟花绽放特效
  • 655
分享到

HTML5和Canvas怎么实现烟花绽放特效

2023-06-09 18:06:19 655人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关HTML5和canvas怎么实现烟花绽放特效的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果如下:undefinedundefinedundefined代码如下:XML/html Co

这篇文章给大家分享的是有关HTML5canvas怎么实现烟花绽放特效的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

效果如下:

HTML5和Canvas怎么实现烟花绽放特效

undefinedundefinedundefined

代码如下:

XML/html Code复制内容到剪贴板

<!DOCTYPE HTML>  <html>    <head>      <title>Canvas 实现放烟花特效</title>   <meta charset="utf-8">      <meta Http-equiv="X-UA-Compatible" content="IE=edge">      <meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0,user-Scalable=no">      <style type="text/CSS">    html,body{height:100%;margin:0;padding:0}     ul,li{text-indent:0;text-decoration:none;margin:0;padding:0}     img{border:0}     body{background-color:#000;color:#999;font:100%/18px helvetica, arial, sans-serif}     canvas{cursor:crosshair;display:block;left:0;position:absolute;top:0;z-index:20}     #header img{width:100%; height:20%;}     #bg img{width:100%; height:80%;}     #header,#bg{position:fixed;left:0;right:0;z-index:10}     #header{top:0}     #bg{position:fixed;z-index:1;bottom:0}     audio{position:fixed;display:none;bottom:0;left:0;right:0;width:100%;z-index:5}    </style>    </head>    <body>   <div id="bg">    <img id="bgimg" src="http://img.ivsky.com/img/tupian/pre/201508/02/yuzhou_xingkong_yu_yueliang-006.jpg">   </div>   <script src="http://cdn.bootcss.com/Jquery/2.2.0/jquery.min.js"></script>   <script>    $(function(){      var Fireworks = function(){       var self = this;       // 产生烟花随机数       var rand = function(rMi, rMa){        //按位取反运算符        return ~~((Math.random()*(rMa-rMi+1))+rMi);       },hitTest = function(x1, y1, w1, h2, x2, y2, w2, h3){        return !(x1 + w1 < x2 || x2 + w2 < x1 || y1 + h2 < y2 || y2 + h3 < y1);       };       //请求动画帧       window.requestAnimFrame=function(){        return window.requestAnimationFrame         ||window.WEBkitRequestAnimationFrame         ||window.mozRequestAnimationFrame         ||window.oRequestAnimationFrame         ||window.msRequestAnimationFrame         ||function(callback){          window.setTimeout(callback,1000/60);         }       }();       self.init = function(){         self.canvas = document.createElement('canvas');          //canvas 全屏        selfself.canvas.width = self.cw = $(window).innerWidth();        selfself.canvas.height = self.ch = $(window).innerHeight();          self.particles = [];         self.partCount = 150;        self.fireworks = [];         selfself.mx = self.cw/2;        selfself.my = self.ch/2;        self.currentHue = 30;        self.partSpeed = 5;        self.partSpeedVariance = 10;        self.partWind = 50;        self.partFriction = 5;        self.partGravity = 1;        self.hueMin = 0;        self.hueMax = 360;        self.fworkSpeed = 4;        self.fworkAccel = 10;        self.hueVariance = 30;        self.flickerDensity = 25;        self.showShockwave = true;        self.showTarget = false;        self.clearAlpha = 25;        $(document.body).append(self.canvas);        selfself.ctx = self.canvas.getContext('2d');        self.ctx.lineCap = 'round';        self.ctx.lineJoin = 'round';        self.lineWidth = 1;        self.bindEvents();           self.canvasLoop();        self.canvas.onselectstart = function() {         return false;        };       };         // 创建粒子       self.createParticles = function(x,y, hue){        var countdown = self.partCount;        while(countdown--){         var newParticle = {          x: x,          y: y,          coordLast: [           {x: x, y: y},           {x: x, y: y},           {x: x, y: y}          ],          angle: rand(0, 360),          speed: rand(((self.partSpeed - self.partSpeedVariance) <= 0) ? 1 : self.partSpeed - self.partSpeedVariance, (self.partSpeed + self.partSpeedVariance)),          friction: 1 - self.partFriction/100,          gravity: self.partGravity/2,          hue: rand(hue-self.hueVariance, hue+self.hueVariance),          brightness: rand(50, 80),          alpha: rand(40,100)/100,          decay: rand(10, 50)/1000,          wind: (rand(0, self.partWind) - (self.partWind/2))/25,          lineWidth: self.lineWidth         };             self.particles.push(newParticle);        }       };       // 更新粒子       self.updateParticles = function(){        var i = self.particles.length;        while(i--){         var p = self.particles[i];         var radians = p.angle * Math.PI / 180;         var vx = Math.cos(radians) * p.speed;         var vy = Math.sin(radians) * p.speed;         p.speed *= p.friction;         p.coordLast[2].x = p.coordLast[1].x;         p.coordLast[2].y = p.coordLast[1].y;         p.coordLast[1].x = p.coordLast[0].x;         p.coordLast[1].y = p.coordLast[0].y;         p.coordLast[0].x = p.x;         p.coordLast[0].y = p.y;         p.x += vx;         p.y += vy;         p.y += p.gravity;         p.angle += p.wind;             p.alpha -= p.decay;         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){               self.particles.splice(i, 1);          }        };       };       // 绘制粒子       self.drawParticles = function(){        var i = self.particles.length;        while(i--){         var p = self.particles[i];                var coordRand = (rand(1,3)-1);         self.ctx.beginPath();                 self.ctx.moveTo(Math.round(p.coordLast[coordRand].x), Math.round(p.coordLast[coordRand].y));         self.ctx.lineTo(Math.round(p.x), Math.round(p.y));         self.ctx.closePath();             self.ctx.strokeStyle = 'hsla('+p.hue+', 100%, '+p.brightness+'%, '+p.alpha+')';         self.ctx.stroke();             if(self.flickerDensity > 0){          var inverseDensity = 50 - self.flickerDensity;               if(rand(0, inverseDensity) === inverseDensity){           self.ctx.beginPath();           self.ctx.arc(Math.round(p.x), Math.round(p.y), rand(p.lineWidth,p.lineWidth+3)/2, 0, Math.PI*2, false)           self.ctx.closePath();           var randrandAlpha = rand(50,100)/100;           self.ctx.fillStyle = 'hsla('+p.hue+', 100%, '+p.brightness+'%, '+randAlpha+')';           self.ctx.fill();          }          }        };       };       // 创建烟花           self.createFireworks = function(startX, startY, targetX, targetY){        var newFirework = {         x: startX,         y: startY,         startX: startX,         startY: startY,         hitX: false,         hitY: false,         coordLast: [          {x: startX, y: startY},          {x: startX, y: startY},          {x: startX, y: startY}         ],         targetX: targetX,         targetY: targetY,         speed: self.fworkSpeed,         angle: Math.atan2(targetY - startY, targetX - startX),         shockwaveAngle: Math.atan2(targetY - startY, targetX - startX)+(90*(Math.PI/180)),         acceleration: self.fworkAccel/100,         hue: self.currentHue,         brightness: rand(50, 80),         alpha: rand(50,100)/100,         lineWidth: self.lineWidth        };           self.fireworks.push(newFirework);       };       // 更新烟花       self.updateFireworks = function(){        var i = self.fireworks.length;        while(i--){         var f = self.fireworks[i];         self.ctx.lineWidth = f.lineWidth;         vx = Math.cos(f.angle) * f.speed,         vy = Math.sin(f.angle) * f.speed;         f.speed *= 1 + f.acceleration;             f.coordLast[2].x = f.coordLast[1].x;         f.coordLast[2].y = f.coordLast[1].y;         f.coordLast[1].x = f.coordLast[0].x;         f.coordLast[1].y = f.coordLast[0].y;         f.coordLast[0].x = f.x;         f.coordLast[0].y = f.y;         if(f.startX >= f.targetX){          if(f.x + vx <= f.targetX){           ff.x = f.targetX;           f.hitX = true;          } else {           f.x += vx;          }         } else {          if(f.x + vx >= f.targetX){           ff.x = f.targetX;           f.hitX = true;          } else {           f.x += vx;          }         }         if(f.startY >= f.targetY){          if(f.y + vy <= f.targetY){           ff.y = f.targetY;           f.hitY = true;          } else {           f.y += vy;          }         } else {          if(f.y + vy >= f.targetY){           ff.y = f.targetY;           f.hitY = true;          } else {           f.y += vy;          }         }             if(f.hitX && f.hitY){          self.createParticles(f.targetX, f.targetY, f.hue);          self.fireworks.splice(i, 1);         }        };       };       // 绘制烟花       self.drawFireworks = function(){        var i = self.fireworks.length;        self.ctx.globalCompositeOperation = 'lighter';        while(i--){         var f = self.fireworks[i];           self.ctx.lineWidth = f.lineWidth;         var coordRand = (rand(1,3)-1);              self.ctx.beginPath();                self.ctx.moveTo(Math.round(f.coordLast[coordRand].x), Math.round(f.coordLast[coordRand].y));         self.ctx.lineTo(Math.round(f.x), Math.round(f.y));         self.ctx.closePath();         self.ctx.strokeStyle = 'hsla('+f.hue+', 100%, '+f.brightness+'%, '+f.alpha+')';         self.ctx.stroke();          if(self.showTarget){          self.ctx.save();          self.ctx.beginPath();          self.ctx.arc(Math.round(f.targetX), Math.round(f.targetY), rand(1,8), 0, Math.PI*2, false)          self.ctx.closePath();          self.ctx.lineWidth = 1;          self.ctx.stroke();          self.ctx.restore();         }         if(self.showShockwave){          self.ctx.save();          self.ctx.translate(Math.round(f.x), Math.round(f.y));          self.ctx.rotate(f.shockwaveAngle);          self.ctx.beginPath();          self.ctx.arc(0, 0, 1*(f.speed/5), 0, Math.PI, true);          self.ctx.strokeStyle = 'hsla('+f.hue+', 100%, '+f.brightness+'%, '+rand(25, 60)/100+')';          self.ctx.lineWidth = f.lineWidth;          self.ctx.stroke();          self.ctx.restore();         }        };       };       // 绑定事件       self.bindEvents = function(){        $(window).on('resize', function(){            clearTimeout(self.timeout);         self.timeout = setTimeout(function() {          selfself.canvas.width = self.cw = $(window).innerWidth();          selfself.canvas.height = self.ch = $(window).innerHeight();          self.ctx.lineCap = 'round';          self.ctx.lineJoin = 'round';         }, 100);        });        $(self.canvas).on('mousedown', function(e){         self.mx = e.pageX - self.canvas.offsetLeft;         self.my = e.pageY - self.canvas.offsetTop;         self.currentHue = rand(self.hueMin, self.hueMax);         self.createFireworks(self.cw/2, self.ch, self.mx, self.my);          $(self.canvas).on('mousemove.fireworks', function(e){          self.mx = e.pageX - self.canvas.offsetLeft;          self.my = e.pageY - self.canvas.offsetTop;          self.currentHue = rand(self.hueMin, self.hueMax);          self.createFireworks(self.cw/2, self.ch, self.mx, self.my);                  });            });        $(self.canvas).on('mouseup', function(e){         $(self.canvas).off('mousemove.fireworks');                 });       };       self.clear = function(){        self.particles = [];        self.fireworks = [];        self.ctx.clearRect(0, 0, self.cw, self.ch);       };       self.canvasLoop = function(){        requestAnimFrame(self.canvasLoop, self.canvas);           self.ctx.globalCompositeOperation = 'destination-out';        self.ctx.fillStyle = 'rgba(0,0,0,'+self.clearAlpha/100+')';        self.ctx.fillRect(0,0,self.cw,self.ch);        self.updateFireworks();        self.updateParticles();        self.drawFireworks();           self.drawParticles();       };       self.init();        }      var fworks = new Fireworks();      $('#info-toggle').on('click', function(e){       $('#info-inner').stop(false, true).slideToggle(100);       e.preventDefault();      });      });    </script>   <canvas width="1400" height="449"></canvas>    </body>  </html>

感谢各位的阅读!关于“HTML5和Canvas怎么实现烟花绽放特效”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: HTML5和Canvas怎么实现烟花绽放特效

本文链接: https://www.lsjlt.com/news/257038.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • HTML5和Canvas怎么实现烟花绽放特效
    这篇文章给大家分享的是有关HTML5和Canvas怎么实现烟花绽放特效的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果如下:undefinedundefinedundefined代码如下:XML/HTML Co...
    99+
    2023-06-09
  • HTML5中怎么用Canvas实现烟花绽放特效
    这篇文章主要介绍“HTML5中怎么用Canvas实现烟花绽放特效”,在日常操作中,相信很多人在HTML5中怎么用Canvas实现烟花绽放特效问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • 怎么用HTML5 Canvas实现烟花绽放动画效果
    这篇文章主要介绍“怎么用HTML5 Canvas实现烟花绽放动画效果”,在日常操作中,相信很多人在怎么用HTML5 Canvas实现烟花绽放动画效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方...
    99+
    2024-04-02
  • HTML5中怎么用Canvas实现超炫酷烟花绽放动画
    这篇文章主要介绍了HTML5中怎么用Canvas实现超炫酷烟花绽放动画的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇HTML5中怎么用Canvas实现超炫酷烟花绽放动画文章都会...
    99+
    2024-04-02
  • 怎么使用canvas实现烟花特效
    小编给大家分享一下怎么使用canvas实现烟花特效,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!canvas可以实现不同动画效果,本文主要记录几种不同节日烟花效果...
    99+
    2023-06-09
  • JavaScript怎么实现烟花和福字特效
    这篇文章主要讲解了“JavaScript怎么实现烟花和福字特效”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript怎么实现烟花和福字特效”吧!超能力一:放烟花先带大家看看实现后...
    99+
    2023-06-26
  • 如何使用css3+js实现烟花绽放的动画效果
    这篇文章主要为大家展示了“如何使用css3+js实现烟花绽放的动画效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用css3+js实现烟花绽放的动画效果...
    99+
    2024-04-02
  • JavaScript实现烟花和福字特效
    目录超能力一:放烟花超能力二:写福字隐藏能力:只有程序员能看懂的祝福虎虎生威、虎年大吉。 事事都如意,虎虎有生气…… 都2022了你还在从网上复制粘贴这些...
    99+
    2024-04-02
  • 怎么使用html和JavaScript实现3D烟花特效
    今天小编给大家分享一下怎么使用html和JavaScript实现3D烟花特效的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。效...
    99+
    2023-07-04
  • JavaScript怎么实现带音效的烟花特效
    这篇文章主要介绍“JavaScript怎么实现带音效的烟花特效”,在日常操作中,相信很多人在JavaScript怎么实现带音效的烟花特效问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript怎么实...
    99+
    2023-06-22
  • JS怎么实现酷炫的烟花特效
    这篇文章主要介绍“JS怎么实现酷炫的烟花特效”,在日常操作中,相信很多人在JS怎么实现酷炫的烟花特效问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS怎么实现酷炫的烟花特效”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-27
  • HTML5中canvas如何实现雪花飘落特效
    这篇文章给大家分享的是有关HTML5中canvas如何实现雪花飘落特效的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最终效果图如下: 图1一、需求分析圆形雪花本示例中雪花形状使用圆形雪花数量固定根据图1...
    99+
    2023-06-09
  • JavaScript实现带音效的烟花特效
    花了半个小时写的代码,这个html5 canvas新年烟花一定不会让大家失望! 首先我们看下静态的效果图: 文章末尾有动态的效果图,滑动即可看到!  JavaScript代码如下:...
    99+
    2024-04-02
  • CSS3如何实现莲花绽放的动画效果
    这篇文章给大家分享的是有关CSS3如何实现莲花绽放的动画效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。先来看效果:这效果看起来挺炫,但原理并不复杂,能实现一片花瓣动起来,就能实现9片花瓣。效果的叠加而已。HT...
    99+
    2023-06-08
  • JavaScript实现烟花特效(面向对象)
    本文实例为大家分享了JavaScript实现烟花特效的具体代码,供大家参考,具体内容如下 本特效使用面向对象编程 分析 OOA 点击触发事件 烟花运动分成两个阶段 ...
    99+
    2024-04-02
  • JavaScript实现五种不同烟花特效
    目录 一、简单大气的烟花二、在农村看到的烟花三、可点击的烟花四、3D旋转烟花五、可拖动视角的自定义烟花 一、简单大气的烟花 演示地址:http://haiyong...
    99+
    2024-04-02
  • 怎么用Python实现烟花效果
    本篇内容主要讲解“怎么用Python实现烟花效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python实现烟花效果”吧!效果如下:这里给出代码,祝各位老哥新年快乐。import&nbs...
    99+
    2023-06-29
  • JavaScript如何实现五种不同烟花特效
    本文将为大家详细介绍“JavaScript如何实现五种不同烟花特效”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“JavaScript如何实现五种不同烟花特效”能够给你意想不到的收获,请大家跟着小编的思路慢慢深...
    99+
    2023-06-26
  • 使用canvas怎么绘制一个烟花效果
    这期内容当中小编将会给大家带来有关使用canvas怎么绘制一个烟花效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。目录结构目录结构大致如下我们将烟花分为两个阶段,一个是未炸开持续上升时期,另一个是炸开后...
    99+
    2023-06-09
  • 基于Html+CSS+JS实现手动放烟花效果
    目录效果展示实现代码HtmlCssJavaScript雷迪森安的乡亲们,欢迎来到老实人的前端课堂,上次写了一个新春小盲盒,这大过年的,我把烟花都给你们准备好了,今天我们来写个小烟花吧...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作