JS实现打字游戏


Posted in Javascript onDecember 17, 2019

本文实例为大家分享了JS实现打字游戏的具体代码,供大家参考,具体内容如下

第一步:页面的排版和布局

1.1实现开始游戏的界面

1.1.1开始游戏

1.1.2游戏说明

<!--游戏开始的界面-->
 <div id="gameStart">
  <div id="start">开始</div>
  <div id="describe">说明</div>
  <div id="des">打字游戏介绍:点击开始,进入游戏开始界面,
  通过点击下落的字母可以获得得分和正确率
  <span id="cl1">关闭</span>
  </div>
</div>

1.2进入游戏的界面

1.2.1开始按钮-->游戏的暂停

1.2.2结束游戏-->清除掉所有字母元素的定时器,删除字母元素

1.2.3退出游戏-->退出到游戏开始的界面

1.2.4设置-->设置当前游戏的难度

1.2.5打字得分-->每打对一字,得一分

1.2.6打字正确率

operate.onclick = function (evt) {
  var e = evt || window.event;
  var target = e.srcElement || e.target;
  // target:当前事件的目标dom节点
  // if(target.className == "t"){
  //  gameStart.style.display = "block";
  //  game.style.display = "none";
  // }
  if(target.className =="set"){
   sel.style.display = "block";
  }
  // 进入游戏界面之后的开始游戏
  // 目标元素的className == 
  if(target.className =="s"){
   target.innerHTML = target.innerHTML == "开始"?"暂停":"开始";
   if(target.innerHTML == "开始"){
    operate.lastElementChild.style.cursor = "pointer";
    clearInterval(c);
    c = undefined;
    clearAllLetters();
   }else{
    //游戏的开始
    operate.lastElementChild.style.cursor = "not-allowed";
    //控制单位时间内字母的多少的定时器
   c = setInterval(function () {
    createLetter();
    letterEles = document.getElementsByClassName("active");
   },level*1000);//控制显示页面字母的多少
    //暂停之后的开始游戏
    gameStar();
   }
  }
 // 处理结束游戏
  if(target.className == "f"){
   finished();
  }
 // 处理退出游戏
  if(target.className == "t"){
 
  // 首先处理结束游戏要做的事情
   finished();
  // 显示游戏开始界面,隐藏进入游戏界面
   game.style.display = "none";
   gameStart.style.display = "block";
  }
 }

在对四个span即开始,设置,结束,退出加事件时用到了事件委托,事件委托有哪些好处呢?

事件委托一般用在对很多dom添加事件处理的情况中,比如:有100个li,每个li都有相同的onclick事件,我们一般会用for循环来遍历所有的li,然后给它们添加事件.但这种方法要不断与dom节点进行交互,访问dom的次数越多,浏览器重绘和重排的次数也越多,就会延长整个页面的交互就绪时间,事件委托的原理就是事件冒泡原理,即从最深的节点开始,一步一步向上传播事件,比如,有一个dom树,div>ul>li,要给li添加点击事件,那么这个点击事件会一层一层往外执行,执行到div上.使用事件委托的话,就可以对它的父级元素进行操作,与dom的操作只需交互一次,大大提高了性能,举个例子吧:

<ul id="cn">
 <li>qwe</li>
 <li>q2w</li>
 <li>wee</li>
 <li>eer</li>
 <li>ewe</li>
</ul>
window.onload() = function () {
 var ul = document.getElementById("cn");
 var li = ul.getElementsByTagName('li');
 for(int i = 0;i < li.length;i++){
 alert(1212);
 }
}

首先找到ul,然后遍历li,点击li的时候,又要找到目标li的位置,才能执行最后的操作,每次点击都要找一次li.性能很低.

采用事件委托优化的代码:

window.onload() = function () {
 var ul = document.getElementById("cn");
 ul.onclick = function () { 
 alert('1220');
 }
}

此上代码在点击ul时也会触发onclick事件,所以不是最终优化的代码.

最终优化的代码:

window.onload() = function () {
 var ul = document.getElementById("cn");
 ul.onclick = function (evt) {
 var e = evt || window.event;
 var target = e.target || e.srcElement;
 if(target.nodeName == 'li'){
 alert('1220');
 }
 }
}

event对象提供了一个target属性,返回的是当前事件的目标元素节点,这样的话点击ul就不会触发onclick事件了. 

第二步:实现开始游戏

2.1说明提示

2.2进入游戏界面

2.3游戏退出

2.4设置;>显示选择游戏难度

第三步:进入游戏界面之后的开始游戏

3.1点击进入游戏,实现字母的掉落

3.2游戏开始之后,实现游戏的暂停

第四步:实现游戏的暂停

4.1清除定时器,清除单位时间内掉落多少个字母的定时器

4.2清除字母掉落速度的定时器,每个字母元素都存在定时器

4.3结束游戏,清除4.1的定时器和删除4.2所有字母所在的元素

4.4退出游戏,结束游戏,显示游戏开始界面,影藏进入游戏界面

第五步:实现游戏难度的设置

5.1游戏的默认难度是慢

5.2游戏在进行过程中是不允许设置游戏难度的

5.3在游戏暂停和开始之前是允许设置游戏难度的

5.4游戏难度设置之后,在关闭游戏难度设置之后生效

第六步:实现键盘打字,字母消失

6.1全局变量:把当前游戏界面里所有字符存放在该变量里

6.2根据键盘输入的字符,在全局变量字符串里找到该字符的位置

6.3删除该字符所在的元素

//evt代表的是事件对象
 document.onkeyup = function (evt) {
  var e = evt || window.event;
  var codeVal = e.keyCode;
  // e.keyCode获得键盘码
  if(codeVal >= 65 && codeVal <= 90){
   count++;
  }
  // 根据Unicode编码找到对应字符
  var char = keyVal[codeVal];
  if(char){
   var index = letters.search(eval("/" + char + "/gi"));
   // var index = letters.search(char);
   if(index != -1) {
   game.removeChild(letterEles[index]);
   var exp = eval("/" + char + "/gi");
   letters = letters.replace(exp, "");
   // letters = letters.replace(char,"");
   tit.children[0].firstElementChild.innerHTML = ++score;
   tit.children[1].firstElementChild.innerHTML = (score/count*100).toFixed(2) + "%";
  }
  }
 }

以上实现键盘打字,字母消失的代码的主要过程是:

通过e.keyCode获得键盘码,通过键盘码找到对应字符,然后用正则表达式的eval方法对找到的字符进行计算,用search方法匹配到当前目标元素节点距离字符串开始位置的偏移位置.把它从父节点里删掉,还要将letters里的目标元素节点删掉,即用空格代替.每打对一字得一分,分数/键盘按下次数即为正确率.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery中加载图片自适应大小主要实现代码
Aug 23 Javascript
在百度知道团队中快速审批新成员的js脚本
Feb 02 Javascript
JavaScript获取页面中第一个锚定文本的方法
Apr 03 Javascript
JavaScript实现简单的二级导航菜单实例
Apr 15 Javascript
JQuery实现鼠标移动图片显示描述层的方法
Jun 25 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
Apr 18 Javascript
JS实现颜色梯度与渐变效果完整实例
Dec 30 Javascript
使用node打造自己的命令行工具方法教程
Mar 26 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
May 15 Javascript
在vue中把含有html标签转为html渲染页面的实例
Oct 28 Javascript
在vue中使用防抖函数组件操作
Jul 26 Javascript
jquery插件实现轮播图效果
Oct 19 jQuery
js实现打字小游戏
Dec 17 #Javascript
微信小程序缓存支持二次开发封装实现解析
Dec 16 #Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
Dec 16 #Javascript
ant-design-vue 实现表格内部字段验证功能
Dec 16 #Javascript
js DOM的事件常见操作实例详解
Dec 16 #Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
Dec 16 #Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
Dec 16 #Javascript
You might like
PHP实现合并两个排序链表的方法
2018/01/19 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
2019/04/23 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
页面使用密码保护代码
2013/04/10 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
javascript怎么禁用浏览器后退按钮
2014/03/27 Javascript
使用jquery组件qrcode生成二维码及应用指南
2015/02/22 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
解决前端跨域问题方案汇总
2016/11/20 Javascript
详解vue 中使用 AJAX获取数据的方法
2017/01/18 Javascript
基于javascript中的typeof和类型判断(详解)
2017/10/27 Javascript
node.js基础知识小结
2018/02/26 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
2020/08/22 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
python使用pil生成图片验证码的方法
2015/05/08 Python
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
python 实现提取某个索引中某个时间段的数据方法
2019/02/01 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
python celery分布式任务队列的使用详解
2019/07/08 Python
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
2014/06/23 HTML / CSS
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
DELPHI面试题研发笔试试卷
2015/11/08 面试题
计算机工程学院个人求职信
2013/10/05 职场文书
医学类个人求职信范文
2014/02/05 职场文书
电影开国大典观后感
2015/06/04 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书