JS实现放烟花效果


Posted in Javascript onMarch 10, 2020

本文实例为大家分享了JS实现放烟花效果的具体代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title>放烟花——欣欣博客</title>
 <style>
 html,body{overflow:hidden;}
 body,div,p{margin:0;padding:0;}
 body{background:#000;font:12px/1.5 arial;color:#7A7A7A;}
 .fire {
 width: 3px;
 height: 30px;
 background: white;
 position: absolute;
 } 
 .spark {
 position: absolute;
 width: 6px;
 height: 6px;
 }
 </style>
 <script src="move.js"></script>
 <script>
 οnlοad=function(){
 document.οnclick=function(e){
  e =e||event;
  var coord ={
  x:e.clientX,
  y:e.clientY
  };
  new Fire(coord).init().launch();
 }
 
 function Fire(coord){
  var self = this;
  //初始化
  this.init=function(){
  this.ball = document.createElement("div");
  this.ball.className="fire";
  this.ball.style.left = coord.x+"px";
  this.ball.style.top= window.innerHeight +"px";
  document.body.appendChild(this.ball);
  return this;
  }
  //发射
  this.launch=function(){
  
  animate(this.ball,{left:coord.x,top:coord.y,height:3},{callback:function(){
  self.explode();
  }});  
  return this;
  }
  //爆炸
  this.explode=function(){
  this.destory();
  var count = randomInt(30,50);
  for(var i =0;i<count;i++){
  new Spark(coord).init().parabola();
  }
  }
  //销毁
  this.destory = function(){
  this.ball.remove();
  }
 }
 function Spark(coord){
  var self = this;
  this.init=function(){
  this.box = document.createElement("div");
  this.box.className="spark";
  this.box.style.backgroundColor="#"+randomColor();
  console.log(this.box.style.backgroundColor)
  this.box.style.left = coord.x+"px";
  this.box.style.top = coord.y+"px";
  this.box.speedX = randomInt(-20,20);
  this.box.speedY = randomInt(-20,10);
  document.body.appendChild(this.box);
  return this;
  }
  this.parabola=function(){
  
  this.timer =setInterval(function(){
  if(self.box.offsetTop >window.innerHeight){
  clearInterval(self.timer);
  self.destroy();
  return;
  }
  self.box.style.left = self.box.offsetLeft + self.box.speedX +"px";
  self.box.style.top = self.box.offsetTop +self.box.speedY++ +"px";
  
  },30)
  
  }
  this.destory=function(){
  this.box.remove();
  }
  
  
 }
 
 //随机整数
 function randomInt(min,max){
  return Math.round(Math.random()*(max-min)+min);
 }
 //随机颜色
 function randomColor(){
  var R = Math.round( Math.random()*255 ).toString(16);
  var G = Math.round( Math.random()*255 ).toString(16);
  var B = Math.round( Math.random()*255 ).toString(16);
  return (R.length<2?"0"+R:R) + (G.length<2?"0"+G:G)+ (B.length<2?"0"+B:B);
 }
 }
 </script>
 </head>
 <body>
 
 </body>
</html>

move.js

/**
 * 
 * @param {Object} obj 目标对象
 * @param {Object} json 要改变的属性
 * @param {Object} extend {buffer,callback} 当buffer为true时为弹性运动
 * callback会在运动结束时,被执行
 * animate(obj, {top:500, left: 300}, {callback:function(){}, buffer: true})
 */
function animate(obj, json, extend){
 extend = extend || {};
 if(obj.isMoving){
 return;
 } else {
 stop();
 obj.isMoving = true;
 }
 //obj = Object.assgin(obj,extend);
 obj.buffer = extend.buffer;
 obj.callback = extend.callback;
 obj.timerlist = {};
 //为每一个属性添加一个定时器
 for(var attr in json){
 (function(attr){
 obj.timerlist[attr] = {speed:0};
 obj.timerlist[attr].timer = setInterval(function(){
 //首先得到当前值
 var iNow = 0;
 if(attr == "opacity"){
  iNow = getStyle(obj, attr) * 100; 
 } else {
  iNow = getStyle(obj, attr);
 }
 var speed = obj.timerlist[attr].speed;
 //根据目标值,计算需要的速度
 if(obj.buffer==true){
  speed += (json[attr] - iNow)/5;
  speed *= 0.75;
 } else {
  speed = (json[attr] - iNow)/5;
 }
 //当无限接近目标值时,停止定时器
 if(Math.abs(iNow - json[attr]) < 0.5){
  clearInterval(obj.timerlist[attr].timer);
  delete obj.timerlist[attr];
  if(getObjLength(obj.timerlist)==0){//所有定时器已停止
  stop();
  obj.callback ? obj.callback() : "";
  }
 } else {
  //根据速度,修改当前值
  if(attr == "opacity"){
  obj.style.opacity = (iNow+speed)/100;
  obj.style.filter = 'alpha(opacity=' + parseFloat(iNow+speed) + ')'; 
  } else {
  obj.style[attr] = iNow+speed+"px";
  }
  obj.timerlist[attr].speed = speed;
 }
 }, 30);
 })(attr);
 }
 
 function clearTimer(){
 for(var i in obj.timerlist){
 clearInterval(obj.timerlist[i]);
 }
 }
 function getStyle(obj, attr){
 if(obj.currentStyle){
 return isNaN(parseFloat(obj.currentStyle[attr])) ? obj.style[attr]=0 : parseFloat(obj.currentStyle[attr]);
 } else {
 return isNaN(parseFloat(getComputedStyle(obj, null)[attr])) ? obj.style[attr]=0 : parseFloat(getComputedStyle(obj, null)[attr]);
 }
 }
 function getObjLength(obj){
 var n = 0;
 for(var i in obj){
 n++;
 }
 return n;
 }
 function stop(){
 clearTimer();//清除所有定时器
 obj.isMoving = false;
 }
}

更多JavaScript精彩特效分享给大家:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery ajax提交整个表单元素的快捷办法
Mar 27 Javascript
javascript中的toFixed固定小数位数 简单实例分享
Jul 12 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
Dec 12 Javascript
JS实现将人民币金额转换为大写的示例代码
Feb 13 Javascript
PHP中CURL的几个经典应用实例
Jan 23 Javascript
JavaScript获取网页支持表单字符集的方法
Apr 02 Javascript
Knockout自定义绑定创建方法
Dec 26 Javascript
JavaScript数据结构之二叉树的删除算法示例
Apr 13 Javascript
详解vue项目首页加载速度优化
Oct 18 Javascript
详解React服务端渲染从入门到精通
Mar 28 Javascript
详解Vue 换肤方案验证
Aug 28 Javascript
uniapp微信小程序:key失效的解决方法
Jan 20 Javascript
JS实现烟花爆炸效果
Mar 10 #Javascript
JS Web Flex弹性盒子模型代码实例
Mar 10 #Javascript
JS实现网页烟花动画效果
Mar 10 #Javascript
keep-alive不能缓存多层级路由菜单问题解决
Mar 10 #Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
Mar 10 #Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
Mar 10 #Javascript
Vue项目打包压缩的实现(让页面更快响应)
Mar 10 #Javascript
You might like
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
2016/06/13 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
Angular 常用指令实例总结整理
2016/12/13 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
LayUI表格批量删除方法
2018/08/15 Javascript
vue写h5页面的方法总结
2019/02/12 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
python线程定时器Timer实现原理解析
2019/11/30 Python
python 画函数曲线示例
2019/12/04 Python
Python面向对象编程基础实例分析
2020/01/17 Python
java关于string最常出现的面试题整理
2021/01/18 Python
Draper James官网:知名演员瑞茜·威瑟斯彭所创品牌
2017/10/25 全球购物
美国糖果店:Sugarfina
2019/02/21 全球购物
BannerBuzz加拿大:在线定制横幅印刷、广告和标志
2020/03/10 全球购物
水污染治理专业毕业生推荐信
2013/11/14 职场文书
后勤人员岗位职责
2013/12/17 职场文书
2015年幼儿园毕业感言
2014/02/12 职场文书
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
查摆剖析材料范文
2014/09/30 职场文书
先进党支部申报材料
2014/12/24 职场文书
婚庆司仪开场白
2015/05/29 职场文书
公司保密管理制度
2015/08/04 职场文书
银行中层干部培训心得体会
2016/01/11 职场文书
Python中Permission denied的解决方案
2021/04/02 Python