原生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与函数式编程解释
Apr 27 Javascript
js 操作css实现代码
Jun 11 Javascript
JS比较两个时间大小的简单示例代码
Dec 20 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
Dec 01 Javascript
基于jquery实现下拉框美化特效
Feb 02 Javascript
JavaScript实现获取远程的html到当前页面中
Mar 26 Javascript
Node.js 实现简单的接口服务器的实例代码
May 23 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
Nov 08 Javascript
vue+node实现图片上传及预览的示例方法
Nov 22 Javascript
Vue代码整洁之去重方法整理
Aug 06 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
Jul 22 Javascript
react ant Design手动设置表单的值操作
Oct 31 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发明人谈MVC和网站设计架构 貌似他不支持php用mvc
2011/06/04 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
[对联广告] JS脚本类
2006/08/27 Javascript
jquery 选择器部分整理
2009/10/28 Javascript
JavaScript 输入框内容格式验证代码
2010/02/11 Javascript
vs2003 js文件编码问题的解决方法
2010/03/20 Javascript
用jquery设置按钮的disabled属性的实现代码
2010/11/28 Javascript
JQuery对checkbox操作 (循环获取)
2011/05/20 Javascript
常用一些Javascript判断函数
2012/08/14 Javascript
jquery实现图片灯箱明暗的遮罩效果
2013/11/15 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
原生js+cookie实现购物车功能的方法分析
2017/12/21 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
python 检查文件mime类型的方法
2018/12/08 Python
对Python中小整数对象池和大整数对象池的使用详解
2019/07/09 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
python实现人脸签到系统
2020/04/13 Python
python Matplotlib数据可视化(1):简单入门
2020/09/30 Python
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
一道SQL面试题
2012/12/31 面试题
《九色鹿》教学反思
2014/02/27 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
法人代表证明书
2014/09/18 职场文书
开学典礼校长致辞
2015/07/29 职场文书
《飘》英文读后感五篇
2019/10/11 职场文书
新手必备Python开发环境搭建教程
2021/05/28 Python
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技