原生JS实现萤火虫效果


Posted in Javascript onMarch 07, 2020

本文实例为大家分享了JS实现萤火虫效果的具体代码,供大家参考,具体内容如下

上代码之前,先看一下效果:

原生JS实现萤火虫效果

CSS部分(此处用元素模拟萤火虫,背景可自行设置):

<style>
 .box{width: 4px;height: 5px;background: wheat;position: absolute;border-radius: 50%;}
 body{background: url(../img/bg.jpg) ;}
</style>

JS部分:

<script>
class Glowworm{
 constructor(){
 // 获取屏幕的可视区域的宽高,用作将来的随机范围
 this.clientW = document.documentElement.clientWidth;
 this.clientH = document.documentElement.clientHeight;
 // 假设萤火虫的宽高
 this.w = 20;
 this.h = 20;
 }
 createEle(){
 var div = document.createElement("div");
 div.className = "box";
 document.body.appendChild(div);
 // 在创建元素之前一定得先生成随机坐标
 div.style.left = this.x + "px";
 div.style.top = this.y + "px";
 // 元素创建好之后,立即运动
 this.move(div);
 }
 randomPos(){
 // 随机生成坐标
 this.x = random(0,this.clientW - this.w);
 this.y = random(0,this.clientH - this.h);
 }
 move(ele){
 // 开始运动之前,还得随机生成目标
 this.randomPos();
 // 开始运动
 move(ele,{
  left:this.x,
  top:this.y
 },()=>{
  // 一个动画结束后,重复开启当前动画,即可
  this.move(ele);
 })
 }
}

for(var i=0;i<60;i++){
 // 先得到实例
 var g = new Glowworm();
 // 生成随机坐标
 g.randomPos();
 // 再创建元素
 g.createEle();
}

function random(a,b){
 return Math.round(Math.random()*(a-b)+b);
}
</script>

最后需要引入一个运动函数:
原生JS封装:带有px的css属性、透明度、且可以运动的函数。

function move(ele,obj,cb){
 clearInterval(ele.t);
 ele.t = setInterval(() => {
 var i = true;
 for(var attr in obj){
  if(attr == "opacity"){
  var iNow = getStyle(ele,attr) * 100;
  }else{
  var iNow = parseInt(getStyle(ele,attr));
  }
  let speed = (obj[attr] - iNow)/10;
  speed = speed < 0 ? Math.floor(speed) : Math.ceil(speed);
  // 只要有一个属性没到目标:绝对不能清除计时器
  if(iNow !== obj[attr]){
  i = false;
  }
  if(attr == "opacity"){
  ele.style.opacity = (iNow + speed)/100;
  }else{
  ele.style[attr] = iNow + speed + "px";
  }
 }
 if(i){
  clearInterval(ele.t);
  if(cb){
  cb();
  }
  // cb && cb();
 }
 }, 30);
}

function getStyle(ele,attr){
 if(ele.currentStyle){
 return ele.currentStyle[attr];
 }else{
 return getComputedStyle(ele,false)[attr];
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
Mar 09 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
Apr 10 Javascript
jQuery的缓存机制浅析
Jun 07 Javascript
JavaScript中return false的用法
Mar 12 Javascript
原生js实现淘宝购物车功能
Jun 23 Javascript
Vue学习之路之登录注册实例代码
Jul 06 Javascript
JS监控关闭浏览器操作的实例详解
Sep 12 Javascript
vue实现手机号码抽奖上下滚动动画示例
Oct 18 Javascript
JavaScript实现重力下落与弹性效果的方法分析
Dec 20 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
Jan 16 Javascript
p5.js入门教程和基本形状绘制
Mar 15 Javascript
vue实现两个组件之间数据共享和修改操作
Nov 12 Javascript
JavaScript实现轮播图片完整代码
Mar 07 #Javascript
JS实现瀑布流效果
Mar 07 #Javascript
Vue中使用better-scroll实现轮播图组件
Mar 07 #Javascript
JavaScript实现栈结构Stack过程详解
Mar 07 #Javascript
node创建Vue项目步骤详解
Mar 06 #Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
Mar 06 #Javascript
小程序跳转H5页面的方法步骤
Mar 06 #Javascript
You might like
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
2014/06/12 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
JS 判断undefined的实现代码
2009/11/26 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
特殊情况下如何获取span里面的值
2014/05/20 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
JavaScript中的时间处理小结
2016/02/24 Javascript
详解js的事件代理(委托)
2016/12/22 Javascript
过期软件破解办法实例详解
2017/01/04 Javascript
JS+Canvas绘制动态时钟效果
2017/11/10 Javascript
微信小程序实现登录遮罩效果
2018/11/01 Javascript
JavaScript类型相关的常用操作总结
2019/02/14 Javascript
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
js实现指定时间倒计时效果
2019/08/26 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
2019/10/24 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
[50:58]2018DOTA2亚洲邀请赛3月29日 小组赛A组OpTic VS Newbee
2018/03/30 DOTA
python根据京东商品url获取产品价格
2015/08/09 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
Python 实现链表实例代码
2017/04/07 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
使用python画社交网络图实例代码
2019/07/10 Python
Python Opencv任意形状目标检测并绘制框图
2019/07/23 Python
解决使用export_graphviz可视化树报错的问题
2019/08/09 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
人力资源行政经理自我评价
2013/10/23 职场文书
有关浪费资源的建议书
2015/09/14 职场文书