Created a new project: Kuli
All checks were successful
Deploy Online Pages / Pages-Deployment (push) Successful in 58s
All checks were successful
Deploy Online Pages / Pages-Deployment (push) Successful in 58s
This commit is contained in:
parent
3e05721765
commit
3339aff375
54
Kuli/index.html
Normal file
54
Kuli/index.html
Normal file
@ -0,0 +1,54 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<title>Enjoy your Kuli</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="clsChg">N</div>
|
||||
<div id="hamburger"><span></span><span></span><span></span></div>
|
||||
<div id="scoreA">
|
||||
<img src="../src/circle.svg" width="50px" height="50px" alt="○" >
|
||||
<span id="corrCntA"></span>
|
||||
<img src="../src/cross.svg" width="50px" height="50px" alt="×">
|
||||
<span id="wrongCntA"></span>
|
||||
</div>
|
||||
<table id="display">
|
||||
<tr>
|
||||
<td id="question" colspan="2">
|
||||
<div id="word"></div>
|
||||
<div id="pronunc"></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td id="ans_0"></td>
|
||||
<td id="ans_1"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td id="ans_2"></td>
|
||||
<td id="ans_3"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="result">
|
||||
<div id="scoreB">
|
||||
<img src="../src/circle.svg" width="20px" height="20px" alt="○" >
|
||||
<span id="corrCntB"></span>
|
||||
<img src="../src/cross.svg" width="20px" height="20px" alt="×">
|
||||
<span id="wrongCntB"></span>
|
||||
</div>
|
||||
<div id="perfect">Perfect!</div>
|
||||
<div id="imperfect"></div>
|
||||
</div>
|
||||
<div id="replay">Replay</div>
|
||||
<a href="../spell-it" class="playAnother">Go Spell It</a>
|
||||
</body>
|
||||
<footer>→Play <a href="../spell-it">Kraft of Spelling</a></footer>
|
||||
<audio src="../../src/startQuiz.mp3" id="startSound"></audio>
|
||||
<audio src="../../src/correct.mp3" id="corrSound"></audio>
|
||||
<audio src="../../src/correct2.mp3" id="corrSound2"></audio>
|
||||
<audio src="../../src/wrong.mp3" id="wrongSound"></audio>
|
||||
<script src="src/words_list.js"></script>
|
||||
<script src="script.js"></script>
|
||||
</html>
|
255
Kuli/script.js
Normal file
255
Kuli/script.js
Normal file
@ -0,0 +1,255 @@
|
||||
let wordClass = "noun";
|
||||
let target = words(wordClass);
|
||||
let targetLen = target.length;
|
||||
console.log(targetLen);
|
||||
|
||||
let body = document.getElementsByTagName("body")[0];
|
||||
let clsChg = document.getElementById("clsChg");
|
||||
let display = document.getElementById("display");
|
||||
let word = document.getElementById("word");
|
||||
let pronunc = document.getElementById("pronunc");
|
||||
let ans = [document.getElementById("ans_0"), document.getElementById("ans_1"), document.getElementById("ans_2"), document.getElementById("ans_3")]
|
||||
let result = document.getElementById("result");
|
||||
let scoreElemA = document.getElementById("scoreA");
|
||||
let scoreElemB = document.getElementById("scoreB");
|
||||
let corrCntElemA = document.getElementById("corrCntA");
|
||||
let wrongCntElemA = document.getElementById("wrongCntA");
|
||||
let corrCntElemB = document.getElementById("corrCntB");
|
||||
let wrongCntElemB = document.getElementById("wrongCntB");
|
||||
let perfect = document.getElementById("perfect");
|
||||
let imperfect = document.getElementById("imperfect");
|
||||
let replay = document.getElementById("replay");
|
||||
let playAnother = document.getElementsByClassName("playAnother")[0];
|
||||
let footer = document.getElementsByTagName("footer")[0];
|
||||
let startSound = document.getElementById("startSound");
|
||||
let corrSound = document.getElementById("corrSound");
|
||||
let corrSound2 = document.getElementById("corrSound2");
|
||||
let wrongSound = document.getElementById("wrongSound");
|
||||
|
||||
let curWordIdx;
|
||||
let curCorrIdx;
|
||||
let isClicked = [false, false, false, false];
|
||||
let wordIdx;
|
||||
let tmpWordIdx;
|
||||
let wordTxt;
|
||||
let corrDict;
|
||||
let corrIdx;
|
||||
let wrongIdx = [];
|
||||
let tmpWrongIdx;
|
||||
let cnt = 0;
|
||||
let corrCnt = 0;
|
||||
let wrongCnt = 0;
|
||||
let wrongs = [];
|
||||
let wrongsLen;
|
||||
let mistakenWordIdx;
|
||||
let mistakenWordMeaning;
|
||||
let mistakenWordMeaningLen;
|
||||
let mistakenWordMeaningTxt;
|
||||
let wrongsTxt;
|
||||
function randElem(arr) {
|
||||
return arr[Math.floor(Math.random() * arr.length)];
|
||||
}
|
||||
function setQuiz() {
|
||||
scoreElemA.style.display = "block";
|
||||
display.style.display = "table";
|
||||
result.style.display = "none";
|
||||
replay.style.display = "none";
|
||||
playAnother.style.display = "none";
|
||||
footer.style.display = "inline";
|
||||
}
|
||||
function removeQuiz() {
|
||||
display.style.display = "none";
|
||||
result.style.display = "block";
|
||||
replay.style.display = "block";
|
||||
playAnother.style.display = "block";
|
||||
footer.style.display = "none";
|
||||
}
|
||||
function quiz() {
|
||||
if (cnt == 20) {
|
||||
removeQuiz();
|
||||
cnt = 0;
|
||||
wrongsLen = wrongs.length;
|
||||
if (wrongsLen == 0) {
|
||||
perfect.style.display = "block";
|
||||
imperfect.style.display = "none";
|
||||
scoreElemA.style.display = "none";
|
||||
scoreElemB.style.display = "none";
|
||||
body.style.animation = "gaming 2s linear infinite";
|
||||
result.style.animation = "gaming 2s linear infinite";
|
||||
perfect.style.animation = "gaming 2s linear infinite";
|
||||
return [null, null];
|
||||
} else {
|
||||
perfect.style.display = "none";
|
||||
imperfect.style.display = "block";
|
||||
scoreElemA.style.display = "none";
|
||||
scoreElemB.style.display = "block";
|
||||
corrCntElemB.innerText = corrCnt;
|
||||
wrongCntElemB.innerText = wrongCnt;
|
||||
wrongsTxt = "";
|
||||
for (let i = 0; i < wrongsLen; ++i) {
|
||||
mistakenWordIdx = wrongs[i][0];
|
||||
mistakenWordMeaning = target[mistakenWordIdx]["meaning"];
|
||||
mistakenWordMeaningLen = mistakenWordMeaning.length;
|
||||
mistakenWordMeaningTxt = "'" + mistakenWordMeaning[0] + "'";
|
||||
if (mistakenWordMeaningLen != 0) {
|
||||
for (let i = 1; i < mistakenWordMeaningLen; ++i) {
|
||||
if (i == mistakenWordMeaningLen - 1) {
|
||||
mistakenWordMeaningTxt += "</span> or <span style=\"color: red;\">'" + mistakenWordMeaning[i] + "'";
|
||||
} else {
|
||||
mistakenWordMeaningTxt += "</span>, <span style=\"color: red;\">'" + mistakenWordMeaning[i] + "'";
|
||||
}
|
||||
}
|
||||
}
|
||||
wrongsTxt += "<span style=\"color: red;\">'" + target[mistakenWordIdx]["word"] + "'</span>"
|
||||
+ " is <span style=\"color: red;\">"
|
||||
+ mistakenWordMeaningTxt + "</span>, not '" + wrongs[i][1] + "'.<br>"
|
||||
}
|
||||
imperfect.innerHTML = wrongsTxt.slice(0, -4);
|
||||
return [null, null];
|
||||
}
|
||||
} else {
|
||||
setQuiz();
|
||||
tmpWordIdx = Math.floor(Math.random() * targetLen);
|
||||
while (tmpWordIdx == wordIdx) {
|
||||
tmpWordIdx = Math.floor(Math.random() * targetLen);
|
||||
}
|
||||
wordIdx = tmpWordIdx;
|
||||
corrIdx = Math.floor(Math.random() * 4);
|
||||
console.log(corrIdx);
|
||||
for (let i = 0; i < 4; ++i) {
|
||||
if (i == corrIdx) continue;
|
||||
tmpWrongIdx = Math.floor(Math.random() * targetLen);
|
||||
while (wrongIdx.includes(tmpWrongIdx) || tmpWrongIdx == wordIdx) {
|
||||
tmpWrongIdx = Math.floor(Math.random() * targetLen);
|
||||
}
|
||||
wrongIdx.push(tmpWrongIdx);
|
||||
ans[i].innerText = randElem(target[tmpWrongIdx]["meaning"]);
|
||||
}
|
||||
wrongIdx = [];
|
||||
corrDict = target[wordIdx]
|
||||
wordTxt = corrDict["word"];
|
||||
if (corrDict["gender_is_distinctive"]) wordTxt += " (" + corrDict["gender"] + ")";
|
||||
word.innerText = wordTxt;
|
||||
pronunc.innerText = "[" + corrDict["pronunc"] + "]";
|
||||
ans[corrIdx].innerText = randElem(corrDict["meaning"]);
|
||||
cnt++;
|
||||
return [wordIdx, corrIdx]
|
||||
}
|
||||
}
|
||||
function start() {
|
||||
[curWordIdx, curCorrIdx] = quiz();
|
||||
startSound.currentTime = 0;
|
||||
startSound.play();
|
||||
corrCnt = 0;
|
||||
wrongCnt = 0;
|
||||
wrongs = [];
|
||||
isClicked = [false, false, false, false];
|
||||
corrCntElemA.innerText = 0;
|
||||
wrongCntElemA.innerText = 0;
|
||||
body.style.animation = "";
|
||||
result.style.animation = "";
|
||||
}
|
||||
start();
|
||||
ans[0].addEventListener("click", () => {
|
||||
if (curCorrIdx == 0) {
|
||||
if (cnt == 20) {
|
||||
corrSound2.play();
|
||||
} else {
|
||||
corrSound.currentTime = 0;
|
||||
corrSound.play();
|
||||
}
|
||||
corrCnt++;
|
||||
corrCntElemA.innerText = corrCnt;
|
||||
[curWordIdx, curCorrIdx] = quiz();
|
||||
isClicked = [false, false, false, false];
|
||||
} else {
|
||||
wrongSound.currentTime = 0;
|
||||
wrongSound.play();
|
||||
if (isClicked[0]) return;
|
||||
wrongCnt++;
|
||||
wrongCntElemA.innerText = wrongCnt;
|
||||
isClicked[0] = true;
|
||||
wrongs.push([curWordIdx, ans[0].textContent]);
|
||||
}
|
||||
})
|
||||
ans[1].addEventListener("click", () => {
|
||||
if (curCorrIdx == 1) {
|
||||
if (cnt == 20) {
|
||||
corrSound2.play();
|
||||
} else {
|
||||
corrSound.currentTime = 0;
|
||||
corrSound.play();
|
||||
}
|
||||
corrCnt++;
|
||||
corrCntElemA.innerText = corrCnt;
|
||||
[curWordIdx, curCorrIdx] = quiz();
|
||||
isClicked = [false, false, false, false];
|
||||
} else {
|
||||
wrongSound.currentTime = 0;
|
||||
wrongSound.play();
|
||||
if (isClicked[1]) return;
|
||||
wrongCnt++;
|
||||
wrongCntElemA.innerText = wrongCnt;
|
||||
isClicked[1] = true;
|
||||
wrongs.push([curWordIdx, ans[1].textContent]);
|
||||
}
|
||||
})
|
||||
ans[2].addEventListener("click", () => {
|
||||
if (curCorrIdx == 2) {
|
||||
if (cnt == 20) {
|
||||
corrSound2.play();
|
||||
} else {
|
||||
corrSound.currentTime = 0;
|
||||
corrSound.play();
|
||||
}
|
||||
corrCnt++;
|
||||
corrCntElemA.innerText = corrCnt;
|
||||
[curWordIdx, curCorrIdx] = quiz();
|
||||
isClicked = [false, false, false, false];
|
||||
} else {
|
||||
wrongSound.currentTime = 0;
|
||||
wrongSound.play();
|
||||
if (isClicked[2]) return;
|
||||
wrongCnt++;
|
||||
wrongCntElemA.innerText = wrongCnt;
|
||||
isClicked[2] = true;
|
||||
wrongs.push([curWordIdx, ans[2].textContent]);
|
||||
}
|
||||
})
|
||||
ans[3].addEventListener("click", () => {
|
||||
if (curCorrIdx == 3) {
|
||||
if (cnt == 20) {
|
||||
corrSound2.play();
|
||||
} else {
|
||||
corrSound.currentTime = 0;
|
||||
corrSound.play();
|
||||
}
|
||||
corrCnt++;
|
||||
corrCntElemA.innerText = corrCnt;
|
||||
[curWordIdx, curCorrIdx] = quiz();
|
||||
isClicked = [false, false, false, false];
|
||||
} else {
|
||||
wrongSound.currentTime = 0;
|
||||
wrongSound.play();
|
||||
if (isClicked[3]) return;
|
||||
wrongCnt++;
|
||||
wrongCntElemA.innerText = wrongCnt;
|
||||
isClicked[3] = true;
|
||||
wrongs.push([curWordIdx, ans[3].textContent]);
|
||||
}
|
||||
})
|
||||
replay.addEventListener("click", start)
|
||||
clsChg.addEventListener("click", () => {
|
||||
if (wordClass == "noun") {
|
||||
wordClass = "verb";
|
||||
clsChg.innerText = "V";
|
||||
} else {
|
||||
wordClass = "noun";
|
||||
clsChg.innerText = "N";
|
||||
}
|
||||
target = words(wordClass);
|
||||
targetLen = target.length;
|
||||
console.log(targetLen);
|
||||
cnt = 0;
|
||||
start();
|
||||
})
|
3
Kuli/src/words_list.js
Normal file
3
Kuli/src/words_list.js
Normal file
@ -0,0 +1,3 @@
|
||||
function words() {
|
||||
|
||||
}
|
179
Kuli/style.css
Normal file
179
Kuli/style.css
Normal file
@ -0,0 +1,179 @@
|
||||
ody {
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#clsChg {
|
||||
position: absolute;
|
||||
display: block;
|
||||
width: 16vh;
|
||||
height: 8vh;
|
||||
text-align: center;
|
||||
border-radius: 2rem;
|
||||
background-color: darkgreen;
|
||||
color: white;
|
||||
font-size: 6vh;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
transition: all 0.3s;
|
||||
box-shadow: 0 3px 5px rgba(0, 0, 0, .3);
|
||||
}
|
||||
|
||||
#clsChg:hover {
|
||||
background-color: green;
|
||||
}
|
||||
|
||||
#hamburger {
|
||||
background-color: green;
|
||||
}
|
||||
|
||||
#scoreA {
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
width: fit-content;
|
||||
text-align: center;
|
||||
font-size: 45px;
|
||||
}
|
||||
|
||||
#display {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
font-size: 8vh;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#question {
|
||||
height: 20%;
|
||||
}
|
||||
|
||||
#word {
|
||||
font-size: 8vh;
|
||||
color: black;
|
||||
}
|
||||
|
||||
#pronunc {
|
||||
font-size: 4vh;
|
||||
font-family: "Times New Roman", "Arial", "Courier New", "Segoe UI";
|
||||
color: gray;
|
||||
}
|
||||
|
||||
#ans_0 {
|
||||
width: 50%;
|
||||
height: 40%;
|
||||
background-color: #d14d28;
|
||||
}
|
||||
|
||||
#ans_0:hover {
|
||||
opacity: 0.6;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#ans_1 {
|
||||
width: 50%;
|
||||
background-color: #59c8ef;
|
||||
}
|
||||
|
||||
#ans_1:hover {
|
||||
opacity: 0.6;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#ans_2 {
|
||||
height: 40%;
|
||||
background-color: #2b9464;
|
||||
}
|
||||
|
||||
#ans_2:hover {
|
||||
opacity: 0.6;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#ans_3 {
|
||||
background-color: #f5df65;
|
||||
}
|
||||
|
||||
#ans_3:hover {
|
||||
opacity: 0.6;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#result {
|
||||
width: fit-content;
|
||||
min-width: 26vw;
|
||||
padding: 0.5em 1em;
|
||||
margin: 0 auto;
|
||||
text-align: left;
|
||||
background-color: white;
|
||||
box-shadow: 0 3px 6px rgba(0, 0, 0, .4);
|
||||
}
|
||||
|
||||
#scoreB {
|
||||
padding: 5px;
|
||||
margin-bottom: 10px;
|
||||
border-bottom: 1px solid black;
|
||||
text-align: center;
|
||||
font-size: 25px;
|
||||
}
|
||||
|
||||
#perfect {
|
||||
display: block;
|
||||
width: 100%;
|
||||
text-align: "center";
|
||||
font-size: 14vw;
|
||||
background-color: black;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#replay,
|
||||
.playAnother {
|
||||
position: relative;
|
||||
display: block;
|
||||
width: 24vw;
|
||||
padding: auto;
|
||||
margin: 10px auto;
|
||||
border-radius: 1rem;
|
||||
background-color: red;
|
||||
color: white !important;
|
||||
font-size: 4vw;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s;
|
||||
box-shadow: 0 3px 5px rgba(0, 0, 0, .3);
|
||||
}
|
||||
|
||||
#replay:hover,
|
||||
.playAnother:hover {
|
||||
background-color: orange;
|
||||
}
|
||||
|
||||
footer {
|
||||
font-size: 4vh;
|
||||
float: right;
|
||||
}
|
||||
|
||||
a {
|
||||
color: blue;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
@keyframes gaming {
|
||||
0% {
|
||||
background-color: magenta;
|
||||
}
|
||||
|
||||
33% {
|
||||
background-color: yellow;
|
||||
}
|
||||
|
||||
66% {
|
||||
background-color: Cyan;
|
||||
}
|
||||
|
||||
100% {
|
||||
background-color: magenta;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user