使用面向对象的方法实现一个萤火虫的效果。
页面样式,bg.jpg是一张动图,使用的是jQuery。

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title></title><style type="text/css">html,body{width: 100%;height: 100%;background: url(img/bg.jpg) no-repeat center;background-size: cover;overflow: hidden;position: relative;}img{position: absolute;width: 38px;height: 38px;/*left:100px;top:100px;*/}</style></head><body><!--<img src="img/1.jpg"/>--></body><script src="js/jquery-1.11.0.js" type="text/javascript" charset="utf-8"></script>
</html>

js:

var firefly = new Object();  //创建firefly这个对象
//下面是这个对象所具有的一些方法属性(我们自己定义)
firefly.element = $("<img src = 'img/1.jpg'/>"); //创建html结构
//显示
firefly.show = function(){this.element.css({left:this.showPoint().pointX,top:this.showPoint().pointY});$("body").append(this.element);
}
//显示的坐标位置在屏幕上
firefly.showPoint = function (){var pointX = Math.abs(Math.random()*window.innerWidth - 18) +"px";var pointY = Math.abs(Math.random()*window.innerHeight - 18) +"px";return {pointX:pointX,pointY:pointY}
}
//飞行时间
firefly.flyTime = function(){//时间为2-5秒var flyTime = Math.floor((Math.random()*3+2)*1000);return flyTime;
}
//飞行
firefly.run = function(){//alert(this.flyTime())var self = this;this.element.animate({left: self.showPoint().pointX,top: self.showPoint().pointY,},this.flyTime(),function(){self.element.animate({left: self.showPoint().pointX,top: self.showPoint().pointY,},self.flyTime(),arguments.callee);});
}
firefly.show();  //显示出来
firefly.run();   //开始飞行

下面使用工厂模式实现

//工厂模式,一定要加return  返回当前创建的对象
function createFireFly(){var firefly = new Object();firefly.element = $("<img src = 'img/1.jpg'/>");firefly.show = function(){this.element.css({left:this.showPoint().pointX,top:this.showPoint().pointY});$("body").append(this.element);}firefly.showPoint = function (){var pointX = Math.abs(Math.random()*window.innerWidth - 18) +"px";var pointY = Math.abs(Math.random()*window.innerHeight - 18) +"px";return {pointX:pointX,pointY:pointY}}firefly.flyTime = function(){//时间为2-5秒var flyTime = Math.floor((Math.random()*3+2)*1000);return flyTime;}firefly.run = function(){//alert(this.flyTime())var self = this;this.element.animate({left: self.showPoint().pointX,top: self.showPoint().pointY,},this.flyTime(),function(){self.element.animate({left: self.showPoint().pointX,top: self.showPoint().pointY,},self.flyTime(),arguments.callee);});}//至关重要return firefly;
}
//创建多个
for(var i = 0; i < 20; i++){var fire1 = createFireFly();fire1.show();fire1.run();
}

使用构造函数

//构造函数(使用this指向)
function Firefly(){this.element = $("<img src = 'img/1.jpg'/>");this.show = function(){this.element.css({left:this.showPoint().pointX,top:this.showPoint().pointY});$("body").append(this.element);}this.showPoint = function (){var pointX = Math.abs(Math.random()*window.innerWidth - 18) +"px";var pointY = Math.abs(Math.random()*window.innerHeight - 18) +"px";return {pointX:pointX,pointY:pointY}}this.flyTime = function(){//时间为2-5秒var flyTime = Math.floor((Math.random()*3+2)*1000);return flyTime;}this.run = function(){//alert(this.flyTime())var self = this;this.element.animate({left: self.showPoint().pointX,top: self.showPoint().pointY,},this.flyTime(),function(){self.element.animate({left: self.showPoint().pointX,top: self.showPoint().pointY,},self.flyTime(),arguments.callee);});}
}
//创建多个
for(var i = 0; i < 20; i++){var fire1 = new Firefly();fire1.show();fire1.run();
}

构造函数加原型链

function Firefly(){this.element = $("<img src = 'img/1.jpg'/>");
}//原型模式Firefly.prototype.show = function(){this.element.css({left:this.showPoint().pointX,top:this.showPoint().pointY});$("body").append(this.element);}Firefly.prototype.showPoint = function (){var pointX = Math.abs(Math.random()*window.innerWidth - 18) +"px";var pointY = Math.abs(Math.random()*window.innerHeight - 18) +"px";return {pointX:pointX,pointY:pointY}}Firefly.prototype.flyTime = function(){//时间为2-5秒var flyTime = Math.floor((Math.random()*3+2)*1000);return flyTime;}Firefly.prototype.run = function(){//alert(this.flyTime())var self = this;this.element.animate({left: self.showPoint().pointX,top: self.showPoint().pointY,},this.flyTime(),function(){self.element.animate({left: self.showPoint().pointX,top: self.showPoint().pointY,},self.flyTime(),arguments.callee);});}for(var i = 0; i < 20; i++){var fire1 = new Firefly();fire1.show();fire1.run();
}

模拟java

//面向对象,模拟java
function Firefly(){this.element = $("<img src = 'img/1.jpg'/>");this.setPointX = function(value){this.pointX = value;}this.getPointX = function(){return this.pointX;}this.setPointY = function(value){this.pointY = value;}this.getPointY = function(){return this.pointY;}this.setRunTime = function(value){this.runtime = value;}this.getRunTime = function(){return this.runtime;}
}Firefly.prototype.show = function(){this.setPointX(Math.abs(Math.random()*window.innerWidth - 18) +"px");
this.setPointY(Math.abs(Math.random()*window.innerHeight - 18) +"px");this.element.css({left:this.getPointX(),top:this.getPointY()});$("body").append(this.element);}Firefly.prototype.run = function(){//alert(this.flyTime())var self = this;this.element.animate({left: this.getPointX(this.setPointX(Math.abs(Math.random()*window.innerWidth - 18) +"px")),top: this.getPointY(this.setPointY(Math.abs(Math.random()*window.innerHeight - 18) +"px"))},this.getRunTime(this.setRunTime(Math.floor((Math.random()*3+2)*1000))),function(){self.element.animate({left: self.getPointX(self.setPointX(Math.abs(Math.random()*window.innerWidth - 18) +"px")),top: self.getPointY(self.setPointY(Math.abs(Math.random()*window.innerHeight - 18) +"px"))      },self.getRunTime(self.setRunTime(Math.floor((Math.random()*3+2)*1000))),arguments.callee);});}
for(var i = 0; i < 20; i++){var fire1 = new Firefly();fire1.show();fire1.run();
}

js面向对象(萤火虫效果)相关推荐

  1. html萤火虫特效代码,原生JS实现萤火虫效果

    本文实例为大家分享了JS实现萤火虫效果的具体代码,供大家参考,具体内容如下 上代码之前,先看一下效果: CSS部分(此处用元素模拟萤火虫,背景可自行设置): .box{width: 4px;heigh ...

  2. 如何利用js实现萤火虫效果

    如何利用js实现萤火虫效果 前言 首先分析萤火虫需要的步骤 2.1随机数函数 2.3获取dom和生成随机坐标 2.3创建生成div 3.我们就可以先创建出这个实例 4.最后就是带入我们封装的move缓 ...

  3. 原生JS实现萤火虫效果

    css部分: <style>.box{width: 4px;height: 5px;background: wheat;position: absolute;border-radius: ...

  4. js面向对象模拟京东商城图片放大效果

    js面向对象模拟京东商城图片放大效果 JavaScript 的核心是支持面向对象的,同时它也提供了强大灵活的 OOP 语言能力.本文简单介绍一下使用JavaScript面向对象思想模拟京东商城鼠标悬浮 ...

  5. JS面向对象——利用transform实现扇子效果

    描述: JS面向对象--利用transform实现扇子效果 效果: 实现: <!DOCTYPE html> <html lang="en"> <hea ...

  6. Canvas星空效果(JS面向对象)

    概述 更多Canvas实例可以看GitHub,不定时更新:https://github.com/xiangshuo1992/canvas-demo 这个Demo主要有以下几点可以讨论: 1.HTML5 ...

  7. 简单粗暴地理解js原型链–js面向对象编程

    简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...

  8. ES6学习笔记(三):教你用js面向对象思维来实现 tab栏增删改查功能

    前两篇文章主要介绍了类和对象.类的继承,如果想了解更多理论请查阅<ES6学习笔记(一):轻松搞懂面向对象编程.类和对象>.<ES6学习笔记(二):教你玩转类的继承和类的对象>, ...

  9. js面向对象编程基础

    js面向对象 文章目录 js面向对象 对象的引用 原型和原型链 系统对象与包装对象 面向对象相关语法 对象的引用 类型比较方式      对象比较时,值跟引用地址都相同时才相等. 类型赋值方式     ...

  10. 【何不三连】JS面向对象最后一弹-多态篇(羽化升仙)

    前言 你盼世界,我盼望你无bug.Hello 大家好!我是霖呆呆! 首先抱歉让大家久等了,大家一直期待的"多态"篇到现在才来 ????,其实我最近挺忙的,给张手机截图让大家感受一下 ...

最新文章

  1. Linux中errno使用
  2. linux 文件权限标识,linux文件权限学习 包括 特殊权限
  3. Leetcode 204. 计数质数 解题思路及C++实现
  4. distanceTransform函数
  5. 战胜 Flash ,HTML5 还需要什么?
  6. 【基础算法】常见的ML、DL编程题
  7. C++ 中的 new/delete 和 new[]/delete[]
  8. 无线循环里面 string = “i”会内存溢出吗?_记一次公司JVM堆溢出抽茧剥丝定位的过程...
  9. oracle 建表字段设置,Oracle创建表、删除表、修改表(添加字段、修改字段、删除字段)语句总结...
  10. 如何使用GitLab和Rancher构建CI/CD流水线–Part 1
  11. php 打印 wap,PHP 输出简单动态WAP页面
  12. nest.js 使用express需要提供多个静态目录的操作
  13. 阿里云发布ET奥运大脑,推进奥运进入数字时代
  14. python聚类分析超市_Biopython聚类分析
  15. 【转】美国百所大学招生网专页~
  16. centos7安装mysql5.5教程_Centos7.x下安装Mysql5.5、5.6、5.7三个版本全教程
  17. ChatGPT 会开源吗?
  18. SQL语法创建及管理数据表结构
  19. 网易我的世界能安装java模组吗_网易的我的世界能不能自己制作模组?怎么制作?...
  20. 大数据培训机构靠谱吗

热门文章

  1. 使用 DMV 进行监视_监视查询性能_针对 Azure SQL 数据库和 Azure SQL 托管实例进行手动性能优化
  2. javascript来判断某个时间是不是处于夏令时
  3. 报错解决:Loading PDSC Debug Description Failed
  4. 第二周、逻辑函数的表示方法及其相互转换
  5. JDBC及衍生知识(上)
  6. 计算机选修论文,学生网上选课系统的设计与实现(计算机系毕业论文).pdf
  7. C# 给Excel单元格添加文本及图片批注
  8. 互联网公司很年轻?拼多多、字节人均年龄27岁,阿里31岁...
  9. java repaint 没反应_Java repaint()在浏览器中不起作用
  10. cmd cd命令格式