原生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 相关文章推荐
jquery tools 系列 scrollable学习
Sep 06 Javascript
JavaScript学习笔记(十七)js 优化
Feb 04 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
Jun 08 Javascript
js AppendChild与insertBefore用法详细对比
Dec 16 Javascript
JavaScript截取字符串的2个函数介绍
Aug 27 Javascript
JS实现网页上随滚动条滚动的层效果代码
Nov 04 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
Dec 08 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
Jan 11 Javascript
JS实现前端页面的搜索功能
Jun 12 Javascript
微信小程序获取用户绑定手机号方法示例
Jul 21 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
Aug 22 Javascript
Vue中添加滚动事件设置的方法详解
Sep 14 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
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
php实现简单四则运算器
2020/11/29 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
2016/08/05 Javascript
基于jQuery的左滑出现删除按钮的示例
2017/08/29 jQuery
JS中的const命令你真懂它吗
2020/03/08 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
微信小程序基于高德地图API实现天气组件(动态效果)
2020/10/22 Javascript
[50:20]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第四局
2016/03/06 DOTA
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
Python求解正态分布置信区间教程
2019/11/20 Python
Django用户身份验证完成示例代码
2020/04/03 Python
Django实现内容缓存实例方法
2020/06/30 Python
Python爬虫之Spider类用法简单介绍
2020/08/04 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
html5利用canvas实现颜色容差抠图功能
2019/12/23 HTML / CSS
加拿大时尚少女服装品牌:Garage
2016/10/10 全球购物
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
Tiqets荷兰:出售欧洲最美丽的景点和博物馆门票
2018/01/09 全球购物
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
结婚周年感言
2014/02/24 职场文书
企业宣传口号
2014/06/12 职场文书
改革共识倡议书
2014/08/29 职场文书
医学检验专业自荐信
2014/09/18 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书
七年级数学教学反思
2016/02/17 职场文书
演讲开头怎么书写?
2019/08/06 职场文书
【海涛教你打dota】体验一超神发条:咱是抢盾专业户
2022/04/01 DOTA