js实现烟花特效


Posted in Javascript onMarch 02, 2020

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

1.概述

在网页背景中实现鼠标点击出现模拟烟花爆炸的特效

2.思路

1.获取鼠标点击位置,底端创建烟花节点。
2.为烟花添加css属性,烟花节点从下至上运动。
3.运动至鼠标位置时移除烟花节点,同时生成多个烟花碎片。
4.为不同的烟花碎片随机生成不同的颜色、运动速度、运动方向。
5.烟花碎片超出屏幕显示部分时移除。

3.代码部分

<!DOCTYPE html>
<html lang="en">
 
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
 <style>
 * {
  padding: 0;
  margin: 0;
 }
 
 html,
 body {
  width: 100%;
  height: 100%;
  background-color: black;
  overflow: hidden;
 }
 </style>
</head>
 
<body>
 <script src="move.js"></script>
 <script>
 
 class Firework {
  constructor(x, y) {//x,y鼠标的位置
  this.x = x;//将水平位置赋值给this.x属性。
  this.y = y;//将垂直位置赋值给this.y属性。
  this.ch = document.documentElement.clientHeight;//可视区的高度
  }
  init() {
  //1.创建烟花节点。
  this.firebox = document.createElement('div');
  this.firebox.style.cssText = `width:5px;height:5px;background:#fff;position:absolute;left:${this.x}px;top:${this.ch}px;`;
  document.body.appendChild(this.firebox);
  this.firemove();//创建完成,直接运动。
  }
  //2.烟花节点运动
  firemove() {
  bufferMove(this.firebox, { top: this.y }, () => {
   document.body.removeChild(this.firebox);
   //当烟花节点消失的时候,创建烟花碎片
   this.createfires()
  });
  }
  //3.当前鼠标点击的位置,随机产生30-60个盒子。(随机颜色)
  createfires() {
  for (let i = 1; i <= this.rannum(30, 60); i++) {
   this.fires = document.createElement('div');
   this.fires.style.cssText = `width:5px;height:5px;background:rgb(${this.rannum(0, 255)},${this.rannum(0, 255)},${this.rannum(0, 255)});position:absolute;left:${this.x}px;top:${this.y}px;`;
   document.body.appendChild(this.fires);
   this.fireboom(this.fires);//设计成一个一个运动,等到循环结束,出现整体结果。
  }
  }
  //4.烟花碎片运动。
  fireboom(obj) {
  //存储当前obj的初始值。
  let initx = this.x;
  let inity = this.y;
 
  //随机产生速度(水平和垂直方向都是随机的,符号也是随机的)。
  let speedx = parseInt((Math.random() > 0.5 ? '-' : '') + this.rannum(1, 15));
  let speedy = parseInt((Math.random() > 0.5 ? '-' : '') + this.rannum(1, 15));
 
  obj.timer = setInterval(() => {
   initx += speedx;
   inity += speedy++; //模拟重力加速度(垂直方向比水平方向快一些)
   if (inity >= this.ch) {
   document.body.removeChild(obj);
   clearInterval(obj.timer);
   }
   obj.style.left = initx + 'px';
   obj.style.top = inity + 'px';
  }, 1000 / 60);
 
  }
  //随机区间数
  rannum(min, max) {
  return Math.round(Math.random() * (max - min) + min);
  }
 }
 
 
 document.onclick = function (ev) {
  var ev = ev || window.event;
  //ev.clientX,ev.clientY//获取的鼠标的位置
  new Firework(ev.clientX, ev.clientY).init();
 }
 </script>
</body>
 
</html>

4.Move.js

function getStyle(obj, attr) {
 if (window.getComputedStyle) {
 return window.getComputedStyle(obj)[attr];
 } else {
 return obj.currentStyle[attr];
 }
}
function bufferMove(obj, json, fn) {
 let speed = 0;
 clearInterval(obj.timer);
 obj.timer = setInterval(function () {
 var flag = true;
 for (var attr in json) {
  var currentValue = null;
  if (attr === 'opacity') {
  currentValue = Math.round(getStyle(obj, attr) * 100);
  } else {
  currentValue = parseInt(getStyle(obj, attr));
  }
  speed = (json[attr] - currentValue) / 10;
  speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
 
  if (currentValue !== json[attr]) {
  if (attr === 'opacity') {
   obj.style.opacity = (currentValue + speed) / 100;
   obj.style.filter = 'alpha(opacity=' + (currentValue + speed) + ')';//IE
  } else {
   obj.style[attr] = currentValue + speed + 'px';
  }
  flag = false;
  }
 }
 if (flag) {
  clearInterval(obj.timer);
  fn && typeof fn === 'function' && fn();
 }
 }, 10);
}

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

Javascript 相关文章推荐
javascript StringBuilder类实现
Dec 22 Javascript
Mootools 1.2教程 类(一)
Sep 15 Javascript
jquery删除提示框弹出是否删除对话框
Jan 07 Javascript
javascript日期对象格式化为字符串的实现方法
Jan 14 Javascript
jquery判断元素是否隐藏的多种方法
May 06 Javascript
javascript实现炫酷的拖动分页
May 11 Javascript
简介JavaScript中的setTime()方法的使用
Jun 11 Javascript
jQuery 如何给Carousel插件添加新的功能
Apr 18 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
Jul 02 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
Aug 20 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
Apr 10 Javascript
微信小程序 scroll-view的使用案例代码详解
Jun 11 Javascript
ES6使用 Array.includes 处理多重条件用法实例分析
Mar 02 #Javascript
JS造成内存泄漏的几种情况实例分析
Mar 02 #Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
Mar 02 #Javascript
JavaScript中break、continue和return的用法区别实例分析
Mar 02 #Javascript
Vue Router的手写实现方法实现
Mar 02 #Javascript
ES6中Set和Map用法实例详解
Mar 02 #Javascript
Vue父组件向子组件传值以及data和props的区别详解
Mar 02 #Javascript
You might like
用PHP开发GUI
2006/10/09 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
JS Excel读取和写入操作(模板操作)实现代码
2010/04/11 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
2013/10/14 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
AngularJS中如何使用echart插件示例详解
2016/10/26 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
vue音乐播放器插件vue-aplayer的配置及其使用实例详解
2017/07/10 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
微信小程序-API接口安全详解
2019/07/16 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
Python Selenium实现无可视化界面过程解析
2020/08/25 Python
Python requests接口测试实现代码
2020/09/08 Python
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
酷瑞网络科技面试题
2012/03/30 面试题
软件测试英文面试题
2012/10/14 面试题
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
房地产广告策划方案
2014/05/15 职场文书
支行行长竞聘报告
2014/11/06 职场文书
人事主管岗位职责
2015/02/04 职场文书
看看如何用Python绘制小米新版天价logo
2021/04/20 Python