原生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 相关文章推荐
Ajax::prototype 源码解读
Jan 22 Javascript
jquery api参考 visualjquery 中国线路 速度快
Nov 30 Javascript
查找iframe里元素的方法可传参
Sep 11 Javascript
标题过长使用javascript按字节截取字符串
Apr 24 Javascript
Windows 系统下安装和部署Egret的开发环境
Jul 31 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
Sep 19 Javascript
详解javascript实现瀑布流列式布局
Jan 29 Javascript
JS判断字符串字节数并截取长度的方法
Mar 05 Javascript
JS判断元素是否在数组内的实现代码
Mar 30 Javascript
JS验证输入的是否是数字及保留几位小数问题
May 09 Javascript
Vue 项目分环境打包的方法示例
Aug 03 Javascript
基于Vue中的父子传值问题解决
Jul 27 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
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
js类式继承的具体实现方法
2013/12/31 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
判断网页编码的方法python版
2016/08/12 Python
Python实现自动发送邮件功能
2021/03/02 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
利用Python库Scapy解析pcap文件的方法
2019/07/23 Python
Python3中urlencode和urldecode的用法详解
2019/07/23 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
pyenv虚拟环境管理python多版本和软件库的方法
2019/12/26 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
IRO美国官网:法国服装品牌
2018/03/06 全球购物
计算机专业自我鉴定
2013/10/15 职场文书
《永远的白衣战士》教学反思
2014/04/25 职场文书
企业安全生产标语
2014/06/06 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
暑期社会实践新闻稿
2015/07/17 职场文书
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP