原生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实现查找/添加/删除/指定元素的class
Apr 12 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
Mar 04 Javascript
JavaScript常用脚本汇总(三)
Mar 04 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
Dec 17 Javascript
JS正则表达式修饰符中multiline(/m)用法分析
Dec 27 Javascript
Angular.js跨controller实现参数传递的两种方法
Feb 20 Javascript
JS数组去重(4种方法)
Mar 27 Javascript
微信小程序 本地数据存储实例详解
Apr 13 Javascript
js实现多张图片延迟加载效果
Jul 17 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
Jun 18 jQuery
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
Oct 28 Javascript
详解node和ES6的模块导出与导入
Feb 19 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中上传大体积文件时需要的设置
2006/10/09 PHP
php实现的CSS更新类实例
2014/09/22 PHP
php实现比较两个文件夹异同的方法
2015/06/18 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
PHP多维数组排序array详解
2017/11/21 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
jquery 仿QQ校友的DIV模拟窗口效果源码
2010/03/24 Javascript
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
js局部刷新页面时间具体实现
2013/07/04 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
js与jQuery 获取父窗、子窗的iframe
2013/12/20 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
Vue.js系列之vue-router(上)(3)
2017/01/03 Javascript
Node.js连接mongodb实例代码
2017/06/06 Javascript
nodeJS实现路由功能实例代码
2017/06/08 NodeJs
vue2项目使用sass的示例代码
2017/06/28 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
浅谈Postman解决token传参的问题
2018/03/31 Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
2019/10/30 Javascript
Python中py文件转换成exe可执行文件的方法
2019/06/14 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
DRF框架API版本管理实现方法解析
2020/08/21 Python
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
致跳远、跳高运动员广播稿
2014/01/09 职场文书
学习委员自我鉴定
2014/01/13 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
2014机关干部学习“焦裕禄精神”思想汇报
2014/09/19 职场文书
通知的格式范文
2015/04/27 职场文书
检察院起诉书
2015/05/20 职场文书
趣味运动会赞词
2015/07/22 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python