我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

效果如下:

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" class="lazy" data-src="http://img.ivsky.com/img/tupian/pre/201508/02/yuzhou_xingkong_yu_yueliang-006.jpg">   </div>   <script class="lazy" data-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怎么实现烟花绽放特效”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

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

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

怎么使用canvas实现烟花特效

小编给大家分享一下怎么使用canvas实现烟花特效,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!canvas可以实现不同动画效果,本文主要记录几种不同节日烟花效果
2023-06-09

JavaScript怎么实现烟花和福字特效

这篇文章主要讲解了“JavaScript怎么实现烟花和福字特效”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript怎么实现烟花和福字特效”吧!超能力一:放烟花先带大家看看实现后
2023-06-26

怎么使用html和JavaScript实现3D烟花特效

今天小编给大家分享一下怎么使用html和JavaScript实现3D烟花特效的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。效
2023-07-04

JavaScript怎么实现带音效的烟花特效

这篇文章主要介绍“JavaScript怎么实现带音效的烟花特效”,在日常操作中,相信很多人在JavaScript怎么实现带音效的烟花特效问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript怎么实
2023-06-22

JS怎么实现酷炫的烟花特效

这篇文章主要介绍“JS怎么实现酷炫的烟花特效”,在日常操作中,相信很多人在JS怎么实现酷炫的烟花特效问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS怎么实现酷炫的烟花特效”的疑惑有所帮助!接下来,请跟着小编
2023-06-27

HTML5中canvas如何实现雪花飘落特效

这篇文章给大家分享的是有关HTML5中canvas如何实现雪花飘落特效的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最终效果图如下: 图1一、需求分析1、圆形雪花本示例中雪花形状使用圆形2、雪花数量固定根据图1仔
2023-06-09

怎么用Python实现烟花效果

本篇内容主要讲解“怎么用Python实现烟花效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python实现烟花效果”吧!效果如下:这里给出代码,祝各位老哥新年快乐。import pyg
2023-06-29

基于Html+CSS+JS怎样实现手动放烟花效果

基于Html+CSS+JS怎样实现手动放烟花效果,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。效果展示注意看有两种模式哦,可以自由切换,鼠标点哪里哪里有烟花,还
2023-06-28

怎么在HTML5中使用Canvas实现一个放大镜效果

这期内容当中小编将会给大家带来有关怎么在HTML5中使用Canvas实现一个放大镜效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。原理首先选择图片的一块区域,然后将这块区域放大,然后再绘制到原先的图片上
2023-06-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录