原生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中String和StringBuffer的速度之争
Apr 01 Javascript
AngularJS入门教程之Hello World!
Dec 06 Javascript
AngularJS中取消对HTML片段转义的方法例子
Jan 04 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
Aug 15 Javascript
详解JavaScript权威指南之对象
Sep 27 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
Nov 18 Javascript
vue滚动轴插件better-scroll使用详解
Oct 17 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
Dec 12 Javascript
Vue中的$set的使用实例代码
Oct 08 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
Mar 13 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
Feb 10 Javascript
js实现小星星游戏
Mar 23 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学习笔记之三 数据库基本操作
2011/01/17 PHP
PHP输出缓存ob系列函数详解
2014/03/11 PHP
PHP文件缓存内容保存格式实例分析
2014/08/20 PHP
thinkPHP中多维数组的遍历方法
2016/01/09 PHP
PHP在线调试执行的实现方法(附demo源码)
2016/04/28 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
一个JavaScript的求爱小特效
2014/05/09 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
jQuery中siblings()方法用法实例
2015/01/08 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
JavaScript 消息框效果【实现代码】
2016/04/27 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
D3.js实现文本的换行详解
2016/10/14 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
详解vue2.0模拟后台json数据
2019/05/16 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
Python爬虫解析网页的4种方式实例及原理解析
2019/12/30 Python
Python实现括号匹配方法详解
2020/02/10 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
网络程序员自荐信
2014/01/25 职场文书
人力资源部门的主要职能
2014/02/22 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
小兵张嘎观后感
2015/06/03 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
python神经网络Xception模型
2022/05/06 Python