原生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 相关文章推荐
jquery pagination插件实现无刷新分页代码
Oct 13 Javascript
得到jQuery detach()后节点中的某个值实现代码
Feb 05 Javascript
JavaScript隐式类型转换
Mar 15 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
Jun 03 Javascript
JavaScript字符串检索字符的方法
Jun 23 Javascript
jQuery基于cookie实现换肤功能实例
Oct 14 jQuery
原生JS实现小小的音乐播放器
Oct 16 Javascript
Javascript网页抢红包外挂实现分享
Jan 11 Javascript
vue中如何去掉空格的方法实现
Nov 09 Javascript
vue进入页面时滚动条始终在底部代码实例
Mar 26 Javascript
js实现星星海特效的示例
Sep 28 Javascript
微信小程序实现登录注册功能
Dec 29 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运行环境配置与开发环境的配置(图文教程)
2013/06/04 PHP
PHP将回调函数作用到给定数组单元的方法
2014/08/19 PHP
Windows下的PHP安装pear教程
2014/10/24 PHP
Thinkphp多文件上传实现方法
2014/10/31 PHP
PHP编程入门的基本语法知识点总结
2016/01/26 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
让焦点自动跳转
2006/07/01 Javascript
javascript 建设银行登陆键盘
2008/06/10 Javascript
ajax 缓存 问题 requestheader
2010/08/01 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
JS和Jquery获取和修改label的值的示例代码
2014/01/15 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
javascript控制台详解
2015/06/25 Javascript
js简单实现调整网页字体大小的方法
2016/07/23 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
jQuery基本过滤选择器用法示例
2016/09/09 Javascript
Angular表单验证实例详解
2016/10/20 Javascript
vue 中swiper的使用教程
2018/05/22 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
python进阶教程之循环对象
2014/08/30 Python
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
Python中的一些陷阱与技巧小结
2015/07/10 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
zookeeper python接口实例详解
2018/01/18 Python
win10下tensorflow和matplotlib安装教程
2018/09/19 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
python三引号如何输入
2020/07/06 Python
CSS3实现多样的边框效果
2018/05/04 HTML / CSS
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
求职简历的自我评价
2014/01/31 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
借款民事起诉状范文
2015/05/19 职场文书