原生JS实现烟花效果


Posted in Javascript onMarch 10, 2020

原生JS实现烟花效果,点击页面生成烟花,向四周扩散,然后再坠落下去。(这里的烟花我是用的特殊字符爱心形状)

原生JS实现烟花效果

基础css代码

/* 设置基础的css样式 */
 body{background: #000;overflow: hidden;}
 .fire{position: absolute;width: 4px;height: 30px;}

js代码:

1、给页面添加点击事件,生成主体烟花

//给页面设置点击事件
 document.onclick = function(eve){
 var e = eve || window.event;
 //设置一个空数组,用来后面存放小烟花
 var arr = [];
 //获取鼠标点击的位置
 var x = e.clientX;
 var y = e.clientY;
 //设置步长
 var speed = 20;
 //生成大烟花,设置他的css样式,出发点在可视区页面的下方
 var fire = document.createElement('div');
 fire.className = 'fire';
 fire.style.background = randomColor();
 fire.style.left = x + 'px';
 fire.style.top = document.documentElement.clientHeight+'px';
 //将大烟花追加到页面上
 document.body.appendChild(fire);

2、设置定时器,让烟花向上运动,删除

//生成定时器
 var t = setInterval(function(){
 //判断如果大烟花的TOP值小于小于目标值,清除定时器,并且将大烟花清除
 if(fire.offsetTop <= y){
 clearInterval(t);
 document.body.removeChild(fire);
 //执行show(生成小烟花)
 show();
 }
 //让大烟花垂直向上运动
 fire.style.top = fire.offsetTop - speed +'px';
 },30);

3、然后在点击的位置生成小烟花,设置样式

function show(){
 //利用循环,生成50个小烟花,给小烟花添加css属性
 for(var i=0;i<50;i++){
 var sFire = document.createElement('div');
 // sFire.className = 'small-fire';
 sFire.style.left = x +'px';
 sFire.style.top = y +'px';
 // sFire.style.background = randomColor();
 sFire.style.color = randomColor();
 sFire.innerHTML = '❤';
 sFire.style.position = 'absolute';
 //生成随机数
 var a=Math.random()*360;
 sFire.sx = Math.sin(a*180/Math.PI)*20*Math.random();
 sFire.sy = Math.cos(a*180/Math.PI)*20*Math.random();
 //将小烟花追加到页面上
 document.body.appendChild(sFire);
 //将生成的烟花信息都添加到数组中
 arr.push(sFire);
 }
 }

4、设置定时器,让小烟花完成自由落体运动

setInterval(function move(){
 //利用循环一直改变小烟花的位置
 for(var i=0;i<arr.length;i++){
 //设置将每次循环的第i个小烟花的运动范围
 arr[i].style.left = arr[i].offsetLeft + arr[i].sx + 'px';
 arr[i].style.top = arr[i].offsetTop + arr[i].sy + 'px';
 //让烟花垂直方向的位置每次都增加,实现下落效果
 arr[i].sy += 1;
 //判断烟花是否运动出屏幕可视区,如果是,就将它删除
 if(arr[i].offsetLeft<0 || arr[i].offsetLeft > document.documentElement.clientWidth || arr[i].offsetTop > document.documentElement.clientHeight){
 document.body.removeChild(arr[i]);
 // arr.splice(i,1);
 }
 }
 },30)
 }

5、最后别忘了我们的随机数和随机颜色的封装

// 范围随机数
 function random(max,min){
  return Math.round(Math.random()*(max-min)+min);
 }
 // 随机颜色
 function randomColor(){
  return "rgb("+random(0,255)+","+random(0,255)+","+random(0,255)+")";
 }

最后我们的烟花效果就实现了

今天的分享就到这里,希望大家能够喜欢。

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

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

Javascript 相关文章推荐
浅谈轻量级js模板引擎simplite
Feb 13 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
Sep 14 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
Oct 26 Javascript
js判断一个字符串是以某个字符串开头的简单实例
Dec 27 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
Feb 05 Javascript
VUE实现日历组件功能
Mar 13 Javascript
基于JavaScript实现活动倒计时效果
Apr 20 Javascript
jQuery实现的电子时钟效果完整示例
Apr 28 jQuery
angular6根据environments配置文件更改开发所需要的环境的方法
Mar 06 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
Mar 08 Javascript
JS实现碰撞检测效果
Mar 12 Javascript
JS前端模块化原理与实现方法详解
Mar 17 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
Mar 10 #Javascript
详解vue-template-admin三级路由无法缓存的解决方案
Mar 10 #Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
Mar 10 #Javascript
js模拟实现烟花特效
Mar 10 #Javascript
JS实现放烟花效果
Mar 10 #Javascript
JS实现烟花爆炸效果
Mar 10 #Javascript
JS Web Flex弹性盒子模型代码实例
Mar 10 #Javascript
You might like
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
2013/06/06 PHP
关于php内存不够用的快速解决方法
2013/10/26 PHP
PDO预处理语句PDOStatement对象使用总结
2014/11/20 PHP
解决 FireFox 下[使用event很麻烦] 的问题.
2006/08/22 Javascript
二级域名转向类
2006/11/09 Javascript
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
2010/11/16 Javascript
javascript中方便增删改cookie的一个类
2012/10/11 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
JavaScript Math.floor方法(对数值向下取整)
2015/01/09 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
AngularJS基础 ng-mouseleave 指令详解
2016/08/02 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
2017/09/14 Javascript
Vue框架之goods组件开发详解
2018/01/25 Javascript
微信小程序时间轴实现方法示例
2019/01/14 Javascript
微信小程序缓存过期时间的使用详情
2019/05/12 Javascript
Python中基本的日期时间处理的学习教程
2015/10/16 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
python实现单机五子棋
2020/08/28 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
Club Monaco加拿大官网:设计师男女服装
2019/09/29 全球购物
高中生职业规划范文
2014/03/09 职场文书
探亲假请假条
2014/04/11 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
IT工程师岗位职责
2014/07/04 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
财产保全担保书
2015/01/20 职场文书
保管员岗位职责
2015/02/14 职场文书
新学期家长寄语2016
2015/12/03 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
python多次执行绘制条形图
2022/04/20 Python