原生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 相关文章推荐
在textarea中显示html页面的javascript代码
Apr 20 Javascript
扩展jQuery 键盘事件的几个基本方法
Oct 30 Javascript
关于JAVASCRIPT urldecode URL解码的问题
Jan 08 Javascript
漂亮的jquery提示效果(仿腾讯弹出层)
Feb 05 Javascript
JavaScript中的Math.LN2属性用法详解
Jun 12 Javascript
Node.js connect ECONNREFUSED错误解决办法
Sep 15 Javascript
原生js仿jquery一些常用方法(必看篇)
Sep 20 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
Sep 24 Javascript
node.js学习之base64编码解码
Oct 21 Javascript
JS+CSS3制作炫酷的弹窗效果
Nov 08 Javascript
seajs实现强制刷新本地缓存的方法分析
Oct 16 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
Nov 07 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
简单PHP上传图片、删除图片实现代码
2010/05/12 PHP
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
php实现读取超大文件的方法
2014/07/28 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
jquery 页面全选框实践代码
2010/04/02 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
tab栏切换原理
2017/03/22 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
Python translator使用实例
2008/09/06 Python
python实现发送和获取手机短信验证码
2016/01/15 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
益模软件Java笔试题
2012/03/27 面试题
航海技术专业毕业生求职信
2014/04/06 职场文书
2014年会计人员工作总结
2014/12/10 职场文书
2015年乡镇扶贫工作总结
2015/04/08 职场文书
教研活动主持词
2015/07/03 职场文书
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript
Python+Matplotlib+LaTeX玩转数学公式
2022/02/24 Python
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏
2022年显卡天梯图(6月更新)
2022/06/17 数码科技