原生js实现打字动画游戏


Posted in Javascript onFebruary 04, 2017

这是昨天用原生的js写的打字动画游戏,主要用的间歇定时器,对象,还有Math方法,感觉还行,主要看消除字母的时间快慢,但是也有bug,就是字母都是一次性生成的,所以一开始,看起来感觉会有种爆炸的感觉,如果能够一次性生成一批,然后分批往下掉就好了,求大神帮忙改改,大家也可以参考参考。

<!DOCTYPE html>
<html>
<head lang="en">
 <meta charset="UTF-8">
 <title></title>
 <style>
  body,button{
   margin: 0;
   padding: 0;
  }
  body {
   background: #333;
  }
  #game {
   width: 400px;
   margin: 0 auto;
  }
  #start {
   width: 80px;
   height: 40px;
  }
  span {
   margin: 20px;
   color: white;
  }
  .letter {
   position: absolute;
   color: yellow;
   font: bold 30px "Arial";
  }
 </style>
 <script>
  window.onload= function () {
   var start = document.getElementById("start");
   var scroll = document.getElementById("scroll");
   var time = document.getElementById("time");
   var g = 1 ;//Gravity
   var timenum = 0 ;//时间的计数
   var num = 0 ;//成绩的计数
   var gameover = false ;
   var timeandtime = null;
   var letters = null ;
   //字母放在一个字符串里面,随机选取
   var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   //点击开始按钮,字母会自动生成,从顶部,以随机速度落下
   //用户操作:按钮对应字母的按钮,然后字母就会消失
   //用户没有点击到的按钮到达底部以后会回到顶上重新落下;
   //用户清除所有字母后,弹出对话框,显示分数和文字。
   //封装一个对象,里面包含获取事件对象,页面位置,清除冒泡,获取事件目标的兼容性方法
   var eventUtil = {
    getEvent: function (event) {
     return event || window.event;
    },
    getPageX: function (event) {
     return event.pageX || event.clientX + document.documentElement.scrollLeft;
    },
    getPageY: function (event) {
     return event.pageY || event.clientY + document.documentElement.scrollTop;
    },
    stopPropagation: function (event) {
     if (event.stopPropagation) {
      event.stopPropagation();
     } else {
      event.cancelBubble = true;
     }
    },
    getTarget: function (event) {
     return event.target || event.srcElement;
    }
   };
   start.onclick= function () {
    for(var i = 0 ;i<26;i++){
     new letter();
    }
    letters = document.body.children;//将页面中所有的div全部放入一个伪数组中,第一个除外,属于game,因此遍历从1开始
    //在键盘上,按下对应的字母键,字母会立即消失,同时分数会增加,并且在上面重新生成;
    document.onkeydown = function (event) {
     var evt = eventUtil.getEvent(event);
     var keychar = String.fromCharCode(evt.keyCode);//将按下的字母键盘码转换成直接的大写字母
     for(var i = 1 ;i<letters.length;i++){
      if(keychar===letters[i].innerHTML){
       num++;
       scroll.innerHTML = num;
       document.body.removeChild(letters[i]);
      }
     }
    }
    timeandtime=setInterval(function () {
     timenum = timenum + 1 ;
     console.log(letters);
     if(letters.length==1){//当伪数组的长度只有一个时,那么游戏就结束
      gameover = true ;
      clearInterval(timeandtime);
      alert("用时"+timenum+"秒,再接再厉!突破10秒!");
     } else {
      time.innerHTML = timenum;
     }
    },1000)
   }
   //封装函数
   function letter(){
    this.x=Math.random()*900+100; //设置位置在100-1000之间
    this.y=0;
    this.speedY = Math.random()*4+1; //速度随机设置在1-5之间
    this.value = str[parseInt(Math.random()*25)]; //在26个字母中随机生成一个字母
    var letDiv = document.createElement("div");
    letDiv.className = "letter";
    letDiv.style.top = this.y+"px";
    letDiv.style.left = this.x+ "px";
    letDiv.innerHTML = this.value;
    document.body.appendChild(letDiv);
    //字母往下掉
    var that = this ;
    this.timer=setInterval(function () {
     //leader = leader + step;
     that.y = that.y + that.speedY;
     if(that.y>=client().height-letDiv.offsetHeight){
      that.y = 0;
      that.x = Math.random()*900+100;
     }
     if(!gameover){
      letDiv.style.left = that.x + "px";
      letDiv.style.top = that.y + "px";
     } else {
      clearInterval(that.timer);
     }
    },15)
   }
   // 获取可视窗口的宽度和高度窗,兼容性问题
   function client() {
    return {
     width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0,
     height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0
    };
   }
  }
 </script>
</head>
<body>
<div id="game">
 <button id="start">开始</button>
 <span>得分:<i id="scroll">0</i></span>
 <span>计时:<i id="time">0</i></span>
</div>
</body>
</html>

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

Javascript 相关文章推荐
javascript replace()正则替换实现代码
Feb 26 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
Mar 05 Javascript
基于jquery的15款幻灯片插件
Apr 10 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
May 07 Javascript
浅谈JavaScript中Date(日期对象),Math对象
Feb 05 Javascript
jquery特效 点击展示与隐藏全文
Dec 09 Javascript
AngularJS 中的指令实践开发指南(一)
Mar 20 Javascript
js实现浏览器倒计时跳转页面效果
Aug 12 Javascript
Bootstrap图片轮播效果详解
Oct 17 Javascript
微信小程序实现天气预报功能
Jul 18 Javascript
原生JS实现的轮播图功能详解
Aug 06 Javascript
详解async/await 异步应用的常用场景
May 13 Javascript
js实现自定义路由
Feb 04 #Javascript
jQuery窗口拖动功能的实现代码
Feb 04 #Javascript
简单易懂的天气插件(代码分享)
Feb 04 #Javascript
URL中“#” “?” &amp;“”号的作用浅析
Feb 04 #Javascript
Angularjs 依赖压缩及自定义过滤器写法
Feb 04 #Javascript
javascript实现复选框全选或反选
Feb 04 #Javascript
JavaScript获取当前时间向前推三个月的方法示例
Feb 04 #Javascript
You might like
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
Prototype Selector对象学习
2009/07/23 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
可在线编辑网页文字效果代码(单击)
2013/03/02 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
2014/06/05 Javascript
Javascript遍历table中的元素示例代码
2014/07/08 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
详解javascript的变量与标识符
2016/01/04 Javascript
jQuery过滤选择器用法示例
2016/09/12 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
2017/01/13 Javascript
js仿网易表单及时验证功能
2017/03/07 Javascript
jQuery实现所有验证通过方可提交的表单验证
2017/11/21 jQuery
微信小程序登录换取token的教程
2018/05/31 Javascript
NodeJs生成sitemap站点地图的方法示例
2019/06/11 NodeJs
vue-model实现简易计算器
2020/08/17 Javascript
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
Python将xml和xsl转换为html的方法
2015/03/10 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
30行Python代码实现高分辨率图像导航的方法
2020/05/22 Python
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
金宝贝童装官网:Gymboree
2016/08/31 全球购物
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
护士毕业生自我鉴定
2014/02/08 职场文书
畜牧兽医本科生的自我评价
2014/03/03 职场文书
《悯农》教学反思
2014/04/28 职场文书
旅游与环境专业求职信
2014/06/05 职场文书
公司授权委托书格式范文
2014/10/02 职场文书
贷款担保书范本
2015/09/22 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python
深入探讨opencv图像矫正算法实战
2021/05/21 Python
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python
SQL Server中使用表变量和临时表
2022/05/20 SQL Server
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang