原生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 相关文章推荐
JavaScript 学习历程和心得分享
Dec 12 Javascript
EXT窗口Window及对话框MessageBox
Jan 27 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
Dec 02 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
Dec 11 Javascript
js与C#进行时间戳转换
Nov 14 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
Mar 06 Javascript
BootStrap中Tab页签切换实例代码
May 30 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
Sep 30 Javascript
jQuery实现元素的插入
Feb 27 Javascript
利用HBuilder打包前端开发webapp为apk的方法
Nov 13 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
Dec 25 Javascript
微信小程序开发实现的IP地址查询功能示例
Mar 28 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
Apache设置虚拟WEB
2006/10/09 PHP
php简单静态页生成过程
2008/03/27 PHP
The specified CGI application misbehaved by not returning a complete set of HTTP headers
2011/03/31 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
JavaScript 学习笔记(十六) js事件
2010/02/01 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
javascript数组去重的方法汇总
2015/04/14 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
jQuery验证插件validate使用详解
2016/05/11 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python操作xml文件详细介绍
2014/06/09 Python
Python正则表达式分组概念与用法详解
2017/06/24 Python
Tensorflow 实现修改张量特定元素的值方法
2018/07/30 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
JAVA高级程序员面试题
2013/09/06 面试题
学前班教师的自我鉴定
2013/12/05 职场文书
素质拓展感言
2014/01/29 职场文书
乌鸦喝水教学反思
2014/02/07 职场文书
读书演讲主持词
2014/03/18 职场文书
美化环境标语
2014/06/20 职场文书
乡镇三严三实学习心得体会
2014/10/13 职场文书
装修安全责任协议书
2016/03/22 职场文书
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android