JavaScript實(shí)現(xiàn)打字游戲
本文實(shí)例為大家分享了JavaScript實(shí)現(xiàn)打字游戲的具體代碼,供大家參考,具體內(nèi)容如下
效果圖:



需求分析:
1、在char這個(gè)div里面顯示要輸入的字母,大寫
2、在result這個(gè)div里面時(shí)時(shí)顯示正確率,比如98%
3、給文檔綁定按鍵事件
4、如果輸入的內(nèi)容和char里面一致,顯示正確動(dòng)畫:animated zoomIn,并更換輸入的字母
5、如果輸入的內(nèi)容和char里面不一致,顯示錯(cuò)誤動(dòng)畫:animated shake error
6、不管是正確還是錯(cuò)誤都時(shí)時(shí)更新result里面的正確率
源代碼:
HTML部分
<mian> <div id="char">A</div> <div id="result">請(qǐng)?jiān)诎存I上按下屏幕上顯示的字母</div> </mian>
css部分
1.為了實(shí)現(xiàn)一些特效,先創(chuàng)建一個(gè)animate.css文件,在封裝一些動(dòng)畫效果放里面
/*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主體代碼,無動(dòng)畫特效版
<style>
body {
margin: 0;
/*開啟彈性布局,并讓彈性布局中的子元素
水平居中對(duì)齊,垂直居中對(duì)齊*/
display: flex;
justify-content: center;
align-items: center;
/*文字居中*/
text-align: center;
/*設(shè)置背景顏色的經(jīng)像漸變*/
background: radial-gradient(circle, #444, #111, #000);
}
#char {
font-size: 400px;
color: lightgreen;
/*設(shè)置文字陰影*/
/*text-shadow: 水平位置 垂直位置 模糊距離 陰影顏色*/
/*位置可以為負(fù)值*/
text-shadow: 0 0 50px #666;
}
#result {
font-size: 20px;
color: #888;
}
/*找到id為char及類名為error的div元素*/
#char.error {
color: red;
}
</style>
JavaScript部分
1.為了簡(jiǎn)化代碼,先封裝一些常用的自定義構(gòu)造函數(shù)
<script>
// 定義一個(gè)函數(shù):rand
// 參數(shù):最小整數(shù),最大整數(shù)
// 返回:兩個(gè)整數(shù)之間的一個(gè)隨機(jī)整數(shù)
function rand(min, max) {
return parseInt(Math.random() * (max - min + 1)) + min;
}
</script>
2.js主體部分,需要用到封裝的函數(shù),調(diào)用即可
<script>
// 獲取相關(guān)元素
var charDiv = document.getElementById('char');
var resultDiv = document.getElementById('result');
// code用于記錄頁面上的字母的編碼,使用全局變量,到處都可以使用
var code, tirme;
var rightNum = 0;//正確次數(shù)
var wrongNum = 0;//錯(cuò)誤次數(shù)
// 1 在char這個(gè)div里面顯示要輸入的字母,大寫
showChar();
// 3 給文檔綁定按鍵事件
document.onkeyup = function (e) {
// 事件對(duì)象
e = window.event || e;
// 獲取按鍵編碼
var keyCode = e.keyCode || e.which;
// 4 如果輸入的內(nèi)容和char里面一致
if (keyCode == code) {
// 顯示正確動(dòng)畫:animated zoomIn
charDiv.className = "animated zoomIn";
rightNum++;
showChar()
}
// 5 如果輸入的內(nèi)容和char里面不一致
else {
// 顯示錯(cuò)誤動(dòng)畫:animated shake error
charDiv.className = "animated shake error";
wrongNum++
}
// 為了下一次有動(dòng)畫,在本次動(dòng)畫完后要移除類名
setTimeout(function () {
charDiv.className = "";
}, 500)
// 6 不管是正確還是錯(cuò)誤都時(shí)時(shí)更新result里面的正確率
// 正確率 = 正確次/總次數(shù)
resultDiv.innerHTML = "正確率:" + parseInt(rightNum / (rightNum + wrongNum) * 100) + "%"
}
// 函數(shù)功能:在char這個(gè)div里面隨機(jī)顯示要輸入的字母:大寫
function showChar() {
// 先隨機(jī)出一個(gè)字母編碼
code = rand(65, 90);
// 變成一個(gè)字母
var char = String.fromCharCode(code);
// 顯示在char這個(gè)div里面
charDiv.innerHTML = char;
}
</script>
總代碼
<html>
<head>
<meta charset="utf-8">
<title>打字游戲</title>
<!--引入animate.css動(dòng)畫庫-->
<link rel="stylesheet" href="animate.css" >
<style>
body {
margin: 0;
/*開啟彈性布局,并讓彈性布局中的子元素
水平居中對(duì)齊,垂直居中對(duì)齊*/
display: flex;
justify-content: center;
align-items: center;
/*文字居中*/
text-align: center;
/*設(shè)置背景顏色的經(jīng)像漸變*/
background: radial-gradient(circle, #444, #111, #000);
}
#char {
font-size: 400px;
color: lightgreen;
/*設(shè)置文字陰影*/
/*text-shadow: 水平位置 垂直位置 模糊距離 陰影顏色*/
/*位置可以為負(fù)值*/
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">請(qǐng)?jiān)诎存I上按下屏幕上顯示的字母</div>
</mian>
</body>
</html>
<script>
// 定義一個(gè)函數(shù):rand
// 參數(shù):最小整數(shù),最大整數(shù)
// 返回:兩個(gè)整數(shù)之間的一個(gè)隨機(jī)整數(shù)
function rand(min, max) {
return parseInt(Math.random() * (max - min + 1)) + min;
}
</script>
<script>
// 獲取相關(guān)元素
var charDiv = document.getElementById('char');
var resultDiv = document.getElementById('result');
// code用于記錄頁面上的字母的編碼,使用全局變量,到處都可以使用
var code, tirme;
var rightNum = 0;//正確次數(shù)
var wrongNum = 0;//錯(cuò)誤次數(shù)
// 1 在char這個(gè)div里面顯示要輸入的字母,大寫
showChar();
// 3 給文檔綁定按鍵事件
document.onkeyup = function (e) {
// 事件對(duì)象
e = window.event || e;
// 獲取按鍵編碼
var keyCode = e.keyCode || e.which;
// 4 如果輸入的內(nèi)容和char里面一致
if (keyCode == code) {
// 顯示正確動(dòng)畫:animated zoomIn
charDiv.className = "animated zoomIn";
rightNum++;
showChar()
}
// 5 如果輸入的內(nèi)容和char里面不一致
else {
// 顯示錯(cuò)誤動(dòng)畫:animated shake error
charDiv.className = "animated shake error";
wrongNum++
}
// 為了下一次有動(dòng)畫,在本次動(dòng)畫完后要移除類名
setTimeout(function () {
charDiv.className = "";
}, 500)
// 6 不管是正確還是錯(cuò)誤都時(shí)時(shí)更新result里面的正確率
// 正確率 = 正確次/總次數(shù)
resultDiv.innerHTML = "正確率:" + parseInt(rightNum / (rightNum + wrongNum) * 100) + "%"
}
// 函數(shù)功能:在char這個(gè)div里面隨機(jī)顯示要輸入的字母:大寫
function showChar() {
// 先隨機(jī)出一個(gè)字母編碼
code = rand(65, 90);
// 變成一個(gè)字母
var char = String.fromCharCode(code);
// 顯示在char這個(gè)div里面
charDiv.innerHTML = char;
}
</script>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
聊聊那些使用前端Javascript實(shí)現(xiàn)的機(jī)器學(xué)習(xí)類庫
本文介紹了前端Javascript實(shí)現(xiàn)的機(jī)器學(xué)習(xí)類庫,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
JavaScript遍歷Json串瀏覽器輸出的結(jié)果不統(tǒng)一問題
json串屬于javascript的一個(gè)對(duì)象,有鍵和值對(duì)應(yīng)的對(duì)象。這篇文章主要介紹了JavaScript遍歷Json串瀏覽器輸出的結(jié)果不統(tǒng)一問題的相關(guān)資料,需要的朋友可以參考下2016-11-11
JS數(shù)據(jù)結(jié)構(gòu)與算法中的隊(duì)列結(jié)構(gòu)詳解
隊(duì)列指的是一種受限的線性表,先進(jìn)先出,今天通過本文帶領(lǐng)大家認(rèn)識(shí)隊(duì)列及隊(duì)列的應(yīng)用,對(duì)JS數(shù)據(jù)結(jié)構(gòu)與算法-隊(duì)列結(jié)構(gòu)相關(guān)知識(shí)感興趣的朋友一起看看吧2022-11-11
詳解JavaScript發(fā)送埋點(diǎn)請(qǐng)求的兩種方式
對(duì)于發(fā)送埋點(diǎn)請(qǐng)求這種應(yīng)用場(chǎng)景,我們有兩種簡(jiǎn)單的處理方式:動(dòng)態(tài)創(chuàng)建<script>和<img>兩種方式。本文就詳細(xì)講講二種方式的實(shí)現(xiàn),需要的可以參考一下2022-06-06
前端實(shí)現(xiàn)json動(dòng)畫詳細(xì)過程(附帶示例)
這篇文章主要介紹了如何使用Lottie制作動(dòng)畫,包括創(chuàng)建動(dòng)畫文件.json、實(shí)現(xiàn)效果、在Git倉庫中保存和共享、運(yùn)行動(dòng)畫以及在動(dòng)畫天堂下載和顯示JSON動(dòng)畫,文中通過代碼及圖文介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02
Javascript 完美運(yùn)動(dòng)框架(逐行分析代碼,讓你輕松了運(yùn)動(dòng)的原理)
這篇文章主要介紹了Javascript 完美運(yùn)動(dòng)框架,逐行分析代碼,讓你輕松了運(yùn)動(dòng)的原理,需要的朋友可以參考下2015-01-01
JavaScript點(diǎn)擊按鈕后彈出透明浮動(dòng)層的方法
這篇文章主要介紹了JavaScript點(diǎn)擊按鈕后彈出透明浮動(dòng)層的方法,可實(shí)現(xiàn)點(diǎn)擊按鈕彈出居中的透明浮動(dòng)層的效果,涉及javascript操作鼠標(biāo)事件及頁面樣式的相關(guān)技巧,需要的朋友可以參考下2015-05-05
js實(shí)現(xiàn)遮罩層劃出效果是生成div而不是顯示
單純的遮蓋層劃出是比較簡(jiǎn)單的,而本例介紹的這個(gè)就有點(diǎn)難度,生成div,而不是顯示存在的div,需要的朋友可以參考下2014-07-07

