原生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 相关文章推荐
[原创]静态页面也可以实现预览 列表不同的显示方式
Oct 14 Javascript
修改file按钮的默认样式实现代码
Apr 23 Javascript
js操纵dom生成下拉列表框的方法
Feb 24 Javascript
jquery实现类似淘宝星星评分功能实例
Sep 12 Javascript
JavaScript去除数组里重复值的方法
Jul 13 Javascript
JavaScript编程的单例设计模讲解
Nov 10 Javascript
JS动态计算移动端rem的解决方案
Oct 14 Javascript
微信小程序slider组件使用详解
Jan 31 Javascript
使用vue-aplayer插件时出现的问题的解决
Mar 02 Javascript
vue 中swiper的使用教程
May 22 Javascript
微信小程序官方动态自定义底部tabBar的例子
Sep 04 Javascript
解决vue中el-tab-pane切换的问题
Jul 19 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扩展介绍与开发教程
2010/08/19 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
类似CSDN图片切换效果脚本
2009/09/17 Javascript
JS 对象介绍
2010/01/20 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
2012/12/28 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
2017/03/09 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
在windows系统中实现python3安装lxml
2016/03/23 Python
python九九乘法表的实例
2017/09/26 Python
python实现flappy bird游戏
2018/12/24 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
CSS3媒体查询(Media Queries)介绍
2013/09/12 HTML / CSS
CSS3实例分享--超炫checkbox复选框和radio单选框
2014/09/01 HTML / CSS
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
英语翻译系毕业生求职信
2013/09/29 职场文书
教育专业个人求职信
2013/12/02 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
销售内勤岗位职责
2015/02/10 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
任长霞观后感
2015/06/16 职场文书
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android