JavaScript实现打字游戏


Posted in Javascript onFebruary 19, 2021

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

效果图:

JavaScript实现打字游戏

JavaScript实现打字游戏

JavaScript实现打字游戏

需求分析:

1、在char这个div里面显示要输入的字母,大写
2、在result这个div里面时时显示正确率,比如98%
3、给文档绑定按键事件
4、如果输入的内容和char里面一致,显示正确动画:animated zoomIn,并更换输入的字母
5、如果输入的内容和char里面不一致,显示错误动画:animated shake error
6、不管是正确还是错误都时时更新result里面的正确率

源代码:

HTML部分

<mian>
 <div id="char">A</div>
 <div id="result">请在按键上按下屏幕上显示的字母</div>
</mian>

css部分

1.为了实现一些特效,先创建一个animate.css文件,在封装一些动画效果放里面

/*animate.css*/
.animated {
 -webkit-animation-duration: 1s;
 animation-duration: 1s;
 -webkit-animation-fill-mode: both;
 animation-fill-mode: both;
}

.animated.infinite {
 -webkit-animation-iteration-count: infinite;
 animation-iteration-count: infinite;
}

.animated.hinge {
 -webkit-animation-duration: 2s;
 animation-duration: 2s;
}

.animated.flipOutX,
.animated.flipOutY,
.animated.bounceIn,
.animated.bounceOut {
 -webkit-animation-duration: .75s;
 animation-duration: .75s;
}
@-webkit-keyframes zoomIn {
 from {
 opacity: 0;
 -webkit-transform: scale3d(.3, .3, .3);
 transform: scale3d(.3, .3, .3);
 }

 50% {
 opacity: 1;
 }
}

@keyframes zoomIn {
 from {
 opacity: 0;
 -webkit-transform: scale3d(.3, .3, .3);
 transform: scale3d(.3, .3, .3);
 }

 50% {
 opacity: 1;
 }
}

.zoomIn {
 -webkit-animation-name: zoomIn;
 animation-name: zoomIn;
}
  .animated {
 -webkit-animation-duration: 1s;
 animation-duration: 1s;
 -webkit-animation-fill-mode: both;
 animation-fill-mode: both;
}
@-webkit-keyframes shake {
 from, to {
 -webkit-transform: translate3d(0, 0, 0);
 transform: translate3d(0, 0, 0);
 }

 10%, 30%, 50%, 70%, 90% {
 -webkit-transform: translate3d(-10px, 0, 0);
 transform: translate3d(-10px, 0, 0);
 }

 20%, 40%, 60%, 80% {
 -webkit-transform: translate3d(10px, 0, 0);
 transform: translate3d(10px, 0, 0);
 }
}

@keyframes shake {
 from, to {
 -webkit-transform: translate3d(0, 0, 0);
 transform: translate3d(0, 0, 0);
 }

 10%, 30%, 50%, 70%, 90% {
 -webkit-transform: translate3d(-10px, 0, 0);
 transform: translate3d(-10px, 0, 0);
 }

 20%, 40%, 60%, 80% {
 -webkit-transform: translate3d(10px, 0, 0);
 transform: translate3d(10px, 0, 0);
 }
}

.shake {
 -webkit-animation-name: shake;
 animation-name: shake;
}

2.css主体代码,无动画特效版

<style>
 body {
  margin: 0;
  /*开启弹性布局,并让弹性布局中的子元素
  水平居中对齐,垂直居中对齐*/
  display: flex;
  justify-content: center;
  align-items: center;
  /*文字居中*/
  text-align: center;
  /*设置背景颜色的经像渐变*/
  background: radial-gradient(circle, #444, #111, #000);
 }

 #char {
  font-size: 400px;
  color: lightgreen;
  /*设置文字阴影*/
  /*text-shadow: 水平位置 垂直位置 模糊距离 阴影颜色*/
  /*位置可以为负值*/
  text-shadow: 0 0 50px #666;
 }

 #result {
  font-size: 20px;
  color: #888;
 }

 /*找到id为char及类名为error的div元素*/
 #char.error {
  color: red;
 }
</style>

JavaScript部分

1.为了简化代码,先封装一些常用的自定义构造函数

<script>
// 定义一个函数:rand
// 参数:最小整数,最大整数
// 返回:两个整数之间的一个随机整数
function rand(min, max) {
 return parseInt(Math.random() * (max - min + 1)) + min;
} 
</script>

2.js主体部分,需要用到封装的函数,调用即可

<script>
 // 获取相关元素
 var charDiv = document.getElementById('char');
 var resultDiv = document.getElementById('result');

 // code用于记录页面上的字母的编码,使用全局变量,到处都可以使用
 var code, tirme;

 var rightNum = 0;//正确次数
 var wrongNum = 0;//错误次数
 // 1 在char这个div里面显示要输入的字母,大写
 showChar();
 // 3 给文档绑定按键事件
 document.onkeyup = function (e) {
 // 事件对象
 e = window.event || e;
 // 获取按键编码
 var keyCode = e.keyCode || e.which;
 // 4 如果输入的内容和char里面一致
 if (keyCode == code) {
  // 显示正确动画:animated zoomIn
  charDiv.className = "animated zoomIn";
  rightNum++;
  showChar()
 }
 // 5 如果输入的内容和char里面不一致
 else {
  // 显示错误动画:animated shake error
  charDiv.className = "animated shake error";
  wrongNum++
 }
 // 为了下一次有动画,在本次动画完后要移除类名
 setTimeout(function () {
  charDiv.className = "";
 }, 500)
 // 6 不管是正确还是错误都时时更新result里面的正确率
 // 正确率 = 正确次/总次数
 resultDiv.innerHTML = "正确率:" + parseInt(rightNum / (rightNum + wrongNum) * 100) + "%"

 }
 // 函数功能:在char这个div里面随机显示要输入的字母:大写
 function showChar() {
  // 先随机出一个字母编码
  code = rand(65, 90);
  // 变成一个字母
  var char = String.fromCharCode(code);
  // 显示在char这个div里面
  charDiv.innerHTML = char;
 }
</script>

总代码

<html>

<head>
 <meta charset="utf-8">
 <title>打字游戏</title>
 <!--引入animate.css动画库-->
 <link rel="stylesheet" href="animate.css" >
 <style>
 body {
  margin: 0;
  /*开启弹性布局,并让弹性布局中的子元素
  水平居中对齐,垂直居中对齐*/
  display: flex;
  justify-content: center;
  align-items: center;
  /*文字居中*/
  text-align: center;
  /*设置背景颜色的经像渐变*/
  background: radial-gradient(circle, #444, #111, #000);
 }

 #char {
  font-size: 400px;
  color: lightgreen;
  /*设置文字阴影*/
  /*text-shadow: 水平位置 垂直位置 模糊距离 阴影颜色*/
  /*位置可以为负值*/
  text-shadow: 0 0 50px #666;
 }

 #result {
  font-size: 20px;
  color: #888;
 }

 /*找到id为char及类名为error的div元素*/
 #char.error {
  color: red;
 }
 </style>
</head>

<body>
 <mian>
 <div id="char">A</div>
 <div id="result">请在按键上按下屏幕上显示的字母</div>
 </mian>
</body>

</html>
<script>
 // 定义一个函数:rand
 // 参数:最小整数,最大整数
 // 返回:两个整数之间的一个随机整数
 function rand(min, max) {
 return parseInt(Math.random() * (max - min + 1)) + min;
 }
</script>
<script>
 // 获取相关元素
 var charDiv = document.getElementById('char');
 var resultDiv = document.getElementById('result');

 // code用于记录页面上的字母的编码,使用全局变量,到处都可以使用
 var code, tirme;

 var rightNum = 0;//正确次数
 var wrongNum = 0;//错误次数
 // 1 在char这个div里面显示要输入的字母,大写
 showChar();
 // 3 给文档绑定按键事件
 document.onkeyup = function (e) {
 // 事件对象
 e = window.event || e;
 // 获取按键编码
 var keyCode = e.keyCode || e.which;
 // 4 如果输入的内容和char里面一致
 if (keyCode == code) {
  // 显示正确动画:animated zoomIn
  charDiv.className = "animated zoomIn";
  rightNum++;
  showChar()
 }
 // 5 如果输入的内容和char里面不一致
 else {
  // 显示错误动画:animated shake error
  charDiv.className = "animated shake error";
  wrongNum++
 }
 // 为了下一次有动画,在本次动画完后要移除类名
 setTimeout(function () {
  charDiv.className = "";
 }, 500)
 // 6 不管是正确还是错误都时时更新result里面的正确率
 // 正确率 = 正确次/总次数
 resultDiv.innerHTML = "正确率:" + parseInt(rightNum / (rightNum + wrongNum) * 100) + "%"

 }
 // 函数功能:在char这个div里面随机显示要输入的字母:大写
 function showChar() {
  // 先随机出一个字母编码
  code = rand(65, 90);
  // 变成一个字母
  var char = String.fromCharCode(code);
  // 显示在char这个div里面
  charDiv.innerHTML = char;
 }
</script>

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

Javascript 相关文章推荐
ExtJS 2.0实用简明教程之应用ExtJS
Apr 29 Javascript
自己写了一个展开和收起的多更能型的js效果
Mar 05 Javascript
巧用replace将文字表情替换为图片
Apr 17 Javascript
手机号码,密码正则验证
Sep 04 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
Nov 23 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
Dec 15 Javascript
node.js中fs.stat与fs.fstat的区别详解
Jun 01 Javascript
Mint UI 基于 Vue.js 移动端组件库
Nov 07 Javascript
React父子组件间的传值的方法
Nov 13 Javascript
原生js实现商品筛选功能
Oct 28 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
Dec 12 Javascript
小程序瀑布流组件实现翻页与图片懒加载
May 19 Javascript
JS+CSS实现动态时钟
Feb 19 #Javascript
js动态添加带圆圈序号列表的实例代码
Feb 18 #Javascript
原生微信小程序开发中 redux 的使用详解
Feb 18 #Javascript
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 #Vue.js
Vue包大小优化的实现(从1.72M到94K)
Feb 18 #Vue.js
Vue如何实现变量表达式选择器
Feb 18 #Vue.js
WebStorm无法正确识别Vue3组合式API的解决方案
Feb 18 #Vue.js
You might like
声音就能俘获人心,蕾姆,是哪个漂亮小姐姐配音呢?
2020/03/03 日漫
从wamp到xampp的升级之路
2015/04/08 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
2020/10/30 PHP
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
初始Nodejs
2014/11/08 NodeJs
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
js实现购物车功能
2018/06/12 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
了不起的11个JavaScript代码重构最佳实践小结
2021/01/11 Javascript
[04:31]2016国际邀请赛中国区预选赛妖精采访
2016/06/27 DOTA
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
使用Python对Csv文件操作实例代码
2017/05/12 Python
Django内容增加富文本功能的实例
2017/10/17 Python
wxPython的安装与使用教程
2018/08/31 Python
python视频按帧截取图片工具
2019/07/23 Python
wxPython实现带颜色的进度条
2019/11/19 Python
python实现对变位词的判断方法
2020/04/05 Python
python+requests接口自动化框架的实现
2020/08/31 Python
利用python绘制正态分布曲线
2021/01/04 Python
新西兰廉价汽车租赁:Snap Rentals
2018/09/14 全球购物
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
string = null 和string = ''的区别
2013/04/28 面试题
KTV的创业计划书范文
2014/02/02 职场文书
《狮子和兔子》教学反思
2014/03/02 职场文书
新教师培训方案
2014/06/08 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
云台山导游词
2015/02/03 职场文书