原生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 相关文章推荐
js实时获取系统当前时间实例代码
Jun 28 Javascript
前端微信支付js代码
Jul 25 Javascript
灵活使用数组制作图片切换js实现
Jul 28 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
Aug 02 Javascript
基于jQuery实现简单人工智能聊天室
Feb 10 Javascript
原生js实现瀑布流布局
Mar 08 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
May 11 Javascript
关于react-router的几种配置方式详解
Jul 24 Javascript
原生JS实现的雪花飘落动画效果
May 03 Javascript
详解JS函数stack size计算方法
Jun 18 Javascript
node app 打包工具pkg的具体使用
Jan 17 Javascript
jQuery实现日历效果
Sep 11 jQuery
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中curl返回false的解决办法
2019/03/18 PHP
Yii框架视图、视图布局、视图数据块操作示例
2019/10/14 PHP
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
基于JavaScript实现全选、不选和反选效果
2017/02/15 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
在bootstrap中实现轮播图实例代码
2017/06/11 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
Three.js利用性能插件stats实现性能监听的方法
2017/09/25 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
深入理解node.js http模块
2018/01/24 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
解决layui下拉框监听问题(监听不到值的变化)
2019/09/28 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
c++生成dll使用python调用dll的方法
2014/01/20 Python
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
python从入门到精通(DAY 1)
2015/12/20 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
2019/07/22 Python
Python的条件锁与事件共享详解
2019/09/12 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
详解python logging日志传输
2020/07/01 Python
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
翻新二手苹果产品的网络领导者:Mac of all Trades
2017/12/19 全球购物
摩托车和ATV零件、配件和服装的首选在线零售商:MotoSport
2017/12/22 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
建筑工程自我鉴定
2013/10/18 职场文书
生产管理的三大手法
2013/11/11 职场文书
小学生开学第一课活动方案
2014/03/27 职场文书
外语系毕业生求职自荐信
2014/04/12 职场文书
法人委托书的范本格式
2014/09/11 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
用python画城市轮播地图
2021/05/28 Python
OpenCV实现普通阈值
2021/11/17 Java/Android