原生JS实现《别踩白块》游戏(兼容IE)


Posted in Javascript onFebruary 20, 2017

兼容了IE,每得20分就加速一次!!!

效果如下:

原生JS实现《别踩白块》游戏(兼容IE)

图(1) 游戏初始

原生JS实现《别踩白块》游戏(兼容IE)

图(2) 游戏开始

代码如下:

<!DOCTYPE html>
<html lang="en">
 <head>
 <meta charset="utf-8">
 <style>
 *{ margin: 0; padding: 0; } 
 .box {
 margin: 50px auto 0 auto;
 width: 400px;
 height: auto;
 border: solid 1px #222;
 } 
 #cont { 
 width: 400px;
 height: 600px; 
 position: relative;
 overflow: hidden;
 }
 #go {
 width: 100%;
 height: 600px;
 position: absolute;
 top: 0;
 font: 700 60px '微软雅黑';
 text-align: center; 
 z-index: 99;
 }
 #go span {
 cursor: pointer;
 background-color: #fff;
 border-bottom: solid 1px #222;
 }
 #main {
 width: 400px;
 height: 600px;
 position: relative;
 top: -150px;
 }
 .row {
 width: 400px;
 height: 150px;
 }
 .row div {
 width: 99px;
 height: 149px;
 border: solid 1px #222;
 float: left;
 border-top-width: 0;
 border-left-width: 0;
 cursor: pointer;
 }
 #count {
 border-top: solid 1px #222;
 width: 400px;
 height: 50px;
 font: 700 36px/50px '微软雅黑';
 text-align: center;
 }
 </style>
 </head>
 <body>
 <div class="box">
 <!-- 布局 --> 
 <div id="cont"> 
 <div id="go">
 <span>Game start</span> 
 </div> 
 <div id="main">
 </div>
 </div> 
 <div id="count"></div>
 </div> 
 </body>
 <script>
 //得当前样式
 function getStyle(obj,arrt){
 //兼容IE
 return obj.currentStyle ? obj.currentStyle[arrt] : getComputedStyle(obj,null)[arrt];
 }
 var main = document.getElementById('main');
 var go = document.getElementById('go');
 var count = document.getElementById('count');
 var cols = ['#1AAB8A','#E15650','#121B39','#80A84E'];
 //动态创建div
 function cDiv(classname){
 //创建div
 var oDiv = document.createElement('div');
 //随机值
 var index = Math.floor(Math.random()*4);
 //行 添加相应的class类
 oDiv.className = classname; 
 //创建行之后再动态创建4个小div并添加到行里面 
 for(var j =0;j<4;j++){
 var iDiv = document.createElement('div'); 
 oDiv.appendChild(iDiv); 
 }
 //然后把行添加到main里面
 //判断需要添加的位置
 if(main.children.length == 0){
 main.appendChild(oDiv);
 }else {
 main.insertBefore(oDiv, main.children[0]);
 } 
 //随机给行里面的某一个div添加背景色 
 oDiv.children[index].style.backgroundColor = cols[index];
 //标记颜色盒子
 oDiv.children[index].className = "i";
 }
 //移动div
 function move(obj){
 //关闭上一个定时器
 clearInterval(obj.timer);
 //默认速度与计分
 var speed = 5,num = 0;
 //定时器管理与开启定时器
 obj.timer = setInterval(function(){
 //速度 
 var step = parseInt(getStyle(obj,'top')) + speed;
 //移动盒子
 obj.style.top = step + 'px';
 //判断并创建新的盒子
 if(parseInt(getStyle(obj,'top')) >= 0){  
  cDiv('row');
  obj.style.top = -150 + 'px';
 }
 //删除边界外的盒子
 if(obj.children.length == 6){
  //删除前,如果有盒子没有点击则结束游戏
  for(var i = 0;i<4;i++){
  if(obj.children[obj.children.length - 1].children[i].className == 'i'){
  //游戏结束
  obj.style.top = '-150px';
  count.innerHTML = '游戏结束,最高得分: ' + num;
  //关闭定时器
  clearInterval(obj.timer);
  //显示开始游戏
  go.children[0].innerHTML = 'Renew game';
  go.style.display = "block";  
  }
  }  
 obj.removeChild(obj.children[obj.children.length - 1]);
 }
 //点击与计分
 obj.onclick = function(event){
 //点击的不是白盒子 
  // 兼容IE
  event = event || window.event;
  if((event.target? event.target : event.srcElement).className == 'i'){
 //点击后的盒子颜色
 (event.target? event.target : event.srcElement).style.backgroundColor = "#bbb";
  //清除盒子标记
  (event.target? event.target : event.srcElement).className = '';
 //计分
 num++;
 //显示得分
 count.innerHTML = '当前得分: ' + num;
 }else {
 //游戏结束
 obj.style.top = 0;
 count.innerHTML = '游戏结束,最高得分: ' + num;
 //关闭定时器
 clearInterval(obj.timer);
  //显示开始游戏
  go.children[0].innerHTML = 'Renew game';
  go.style.display = "block";
 }
 //盒子加速
 if(num%20 == 0){
 speed++;
 }
 } 
 },20) 
 } 
 //开始游戏
 go.children[0].onclick = function(){
 //开始前判断main里面是否有盒子,有则全部删除
 if(main.children.length){
 //暴力清楚main里面所有盒子
 main.innerHTML = '';
 }
 //清空计分
 count.innerHTML = '游戏开始'; 
 //隐藏开始盒子
 this.parentNode.style.display = "none";
 //调用定时器
 move(main);
 } 
 </script>
</html>

 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
解决 firefox 不支持 document.all的方法
Mar 12 Javascript
复选框全选与全不选操作实现思路
Aug 18 Javascript
jquery和js实现对div的隐藏和显示方法
Sep 26 Javascript
JS遍历数组及打印数组实例分析
Jan 21 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
Jun 24 Javascript
jQuery常见的选择器及用法介绍
Dec 20 Javascript
javascript实现简单的ajax封装示例
Dec 28 Javascript
JavaScript仿支付宝6位数字密码输入框
Dec 29 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
Feb 13 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
Sep 06 Javascript
微信小程序实现抖音播放效果的实例代码
Apr 11 Javascript
JavaScript实现点击切换验证码及校验
Jan 10 Javascript
javascript基础练习之翻转字符串与回文
Feb 20 #Javascript
JS实现动态修改table及合并单元格的方法示例
Feb 20 #Javascript
原生javascript实现读写CSS样式的方法详解
Feb 20 #Javascript
JS实现中国公民身份证号码有效性验证
Feb 20 #Javascript
js中new一个对象的过程
Feb 20 #Javascript
利用node.js搭建简单web服务器的方法教程
Feb 20 #Javascript
jQuery实现鼠标跟随效果
Feb 20 #Javascript
You might like
PHP 登录记住密码实现思路
2013/05/07 PHP
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
JavaScript引用类型RegExp基本用法详解
2018/08/09 Javascript
vue实现键盘输入支付密码功能
2018/08/18 Javascript
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
Python冒泡排序注意要点实例详解
2016/09/09 Python
python 创建弹出式菜单的实现代码
2017/07/11 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
详解python中的hashlib模块的使用
2019/04/22 Python
django表单的Widgets使用详解
2019/07/22 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
2020/06/24 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
利用html5 canvas动态画饼状图的示例代码
2018/04/02 HTML / CSS
美国正宗奢华复古手袋、珠宝及配饰网站:What Goes Around Comes Around
2018/07/21 全球购物
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
新东网科技Java笔试题
2012/07/13 面试题
精细化工应届生求职信
2013/11/17 职场文书
简历自我评价怎么写呢?
2014/01/06 职场文书
企业新年寄语
2014/04/04 职场文书
公司委托书格式范文
2014/04/04 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
给医院的感谢信
2015/01/21 职场文书
校本研修个人总结
2015/02/28 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
药房管理制度范本
2015/08/06 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书
详解Java实现数据结构之并查集
2021/06/23 Java/Android
Java 数组内置函数toArray详解
2021/06/28 Java/Android
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python
Python+Selenium自动化环境搭建与操作基础详解
2022/03/13 Python