原生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 相关文章推荐
js浮动图片的动态效果
Jul 10 Javascript
可编辑下拉框的2种实现方式
Jun 13 Javascript
jQuery遍历DOM节点操作之filter()方法详解
Apr 14 Javascript
jQuery遍历节点树方法分析
Sep 08 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
Mar 01 Javascript
js 去掉字符串前后空格实现代码集合
Mar 25 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
May 11 Javascript
requirejs + vue 项目搭建详解
Jun 16 Javascript
微信小程序框架wepy之动态控制类名
Sep 14 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
Apr 20 Javascript
详解微信小程序网络请求接口封装实例
May 02 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
Nov 09 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
PHP实现ftp上传文件示例
2014/08/21 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
PHP对象实例化单例方法
2017/01/19 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
2017/05/23 PHP
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
javascript校验价格合法性实例(必须输入2位小数)
2014/05/05 Javascript
一个简单的全屏图片上下打开显示网页效果示例
2014/07/08 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
关于Jquery中的事件绑定总结
2016/10/26 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
[00:35]TI7不朽珍藏III——寒冰飞龙不朽展示
2017/07/15 DOTA
python中的多线程实例教程
2014/08/27 Python
简单的编程0基础下Python入门指引
2015/04/01 Python
简单谈谈python中的语句和语法
2017/08/10 Python
python逐行读写txt文件的实例讲解
2018/04/03 Python
python中sys.argv函数精简概括
2018/07/08 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
会计与审计专业大专生求职信
2013/10/03 职场文书
毕业生多媒体设计求职信
2013/10/12 职场文书
外贸业务员的岗位职责
2013/11/23 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
运动会入场口号
2014/06/07 职场文书
华山导游词
2015/02/03 职场文书
雾霾停课通知
2015/04/24 职场文书
无罪辩护词范文
2015/05/21 职场文书
delete in子查询不走索引问题分析
2022/07/07 MySQL