原生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 相关文章推荐
循环 vs 递归浅谈
Feb 28 Javascript
js中reverse函数的用法详解
Dec 26 Javascript
js 判断图片是否加载完以及实现图片的预下载
Aug 14 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
Sep 29 Javascript
javascript数据类型详解
Feb 07 Javascript
AngularJS表格样式简单设置方法示例
Mar 03 Javascript
Javascript中从学习bind到实现bind的过程
Jan 05 Javascript
JavaScript中import用法总结
Jan 20 Javascript
vue swipe自定义组件实现轮播效果
Jul 03 Javascript
小程序Request的另类用法详解
Aug 09 Javascript
原生javascript制作的拼图游戏实现方法详解
Feb 23 Javascript
完美解决通过IP地址访问VUE项目的问题
Jul 18 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/04/22 PHP
PHP 文件扩展名 获取函数
2009/06/03 PHP
腾讯QQ php程序员面试题目整理
2010/06/08 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
cloudgamer出品ImageZoom 图片放大效果
2010/04/01 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
Extjs单独定义各组件的实例代码
2013/06/25 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
javascript利用apply和arguments复用方法
2013/11/25 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
2015/08/10 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
浅析JS异步加载进度条
2016/05/05 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
Python多进程multiprocessing.Pool类详解
2018/04/27 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
2019/05/23 Python
python实现websocket的客户端压力测试
2019/06/25 Python
Html5 localStorage入门教程
2018/04/26 HTML / CSS
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
兰芝美国网上商城:购买LANEIGE睡眠面膜等
2017/06/30 全球购物
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
PHP如何设置和取得Cookie值
2015/06/30 面试题
市场营销职业生涯规划书范文
2014/01/12 职场文书
室内拓展活动方案
2014/02/13 职场文书
房屋租赁协议书范本
2014/04/10 职场文书
交通事故委托书范本精选
2014/10/04 职场文书
交通事故案件代理词
2015/05/23 职场文书
学术会议领导致辞
2015/07/29 职场文书
Java对文件的读写操作方法
2022/04/29 Java/Android