原生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判断ie版本号的简单实现代码
Mar 05 Javascript
javascript跨浏览器的属性判断方法
Mar 16 Javascript
js加密解密字符串可自定义密码因子
May 13 Javascript
基于jQuery实现文本框缩放以及上下移动功能
Nov 24 Javascript
js实现a标签超链接提交form表单的方法
Jun 24 Javascript
简介AngularJS中$http服务的用法
Feb 06 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
Feb 23 Javascript
ES6教程之for循环和Map,Set用法分析
Apr 10 Javascript
Bootstrap模态框插入视频的实现代码
Jun 25 Javascript
基于Vue生产环境部署详解
Sep 15 Javascript
JavaScript中发出HTTP请求最常用的方法
Jul 12 Javascript
JavaScript寄生组合式继承原理与用法分析
Jan 11 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实现网站插件机制的方法
2009/11/10 PHP
php获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
Javascript 写的简单进度条控件
2008/01/22 Javascript
javascript 24小时弹出一次的代码(利用cookies)
2009/09/03 Javascript
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
Jquery中获取iframe的代码
2011/01/11 Javascript
js中widow.open()方法使用详解
2013/07/30 Javascript
对比分析json及XML
2014/11/28 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
浅谈js中的this问题
2017/08/31 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
vue动画效果实现方法示例
2019/03/18 Javascript
关于JS模块化的知识点分享
2019/10/16 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
python 编码规范整理
2018/05/05 Python
Python3之字节串bytes与字节数组bytearray的使用详解
2019/08/27 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
2020/03/27 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
2020/11/28 Python
企业宣传方案
2014/03/04 职场文书
商务日语专业毕业生自荐信
2014/03/27 职场文书
户外宣传策划方案
2014/05/25 职场文书
禁烟标语大全
2014/06/11 职场文书
普通党员自我剖析材料
2014/10/07 职场文书
教师辞职信范文
2015/02/28 职场文书
承诺书的内容有哪些,怎么写?
2019/06/21 职场文书
golang中实现给gif、png、jpeg图片添加文字水印
2021/04/26 Golang
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技