新手村12 - Key Sequence Detection

12 - Key Sequence Detection

俗話說的好,一天一蘋果,醫生遠離我

一天一 JS,What the f*ck JavaScript?

small steps every day - 記錄著新手村日記

完成目標

index_START.html

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Key Detection</title>
<script type="text/javascript" src="http://www.cornify.com/js/cornify.js"></script>
</head>
<body>
<script>
</script>
</body>
</html>

JS - step by step

首先,這個範例就是使用者打出 secretCode 密技的內容 上上下下左左右右 就可以召喚出圖片,因此,開始時我們應該先偵測使用者在 keyup 的時候,輸入了什麼按鍵

1
2
3
4
5
<script>
window.addEventListener('keyup',function(env){
console.log(env.key, env.keyCode)
});
</script>

把指令的密技 keyCode 存成一個陣列,並將使用者的 input 設為一個空陣列

1
2
3
4
5
6
7
<script>
const secretCode = [38, 38, 40, 40, 37, 37, 39, 39];
const userinput = [];
window.addEventListener('keyup',function(env){
console.log(env.key, env.keyCode)
});
</script>

假設使用者輸入數字時,透過 push 會將 keyCode 推進去 userinput 陣列中

Array.prototype.push():https://tinyurl.com/yycov32s

1
2
3
4
5
6
7
<script>
const secretCode = [38, 38, 40, 40, 37, 37, 39, 39];
const userinput = [];
window.addEventListener('keyup',function(env){
userinput.push(env.keyCode);
});
</script>

如果使用者 input 的 KeycodesecretCode 相同的話,就會呼叫 cornify_add() 這個 JS 套件中的方法

1
2
3
4
5
6
7
8
9
10
<script>
const secretCode = [38, 38, 40, 40, 37, 37, 39, 39];
const userinput = [];
window.addEventListener('keyup',function(env){
userinput.push(env.keyCode);
if(userinput.join('') === secretCode.join('')){
cornify_add();
}
});
</script>

userinput 陣列打對一次後會一直越來越多~來判斷一下 userinput 長度太長的話,把第一個砍掉

Array.prototype.shift():https://tinyurl.com/y4bs8dmf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script>
const secretCode = [38, 38, 40, 40, 37, 37, 39, 39];
const userinput = [];
window.addEventListener('keyup',function(env){
userinput.push(env.keyCode);

while(userinput.length > secretCode.length){
userinput.shift();
}
if(userinput.join('') === secretCode.join('')){
cornify_add();
}
});
</script>

就大功告成啦!

JS - Final

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script>
const secretCode = [38, 38, 40, 40, 37, 37, 39, 39];
const userinput = [];
window.addEventListener('keyup',function(env){
userinput.push(env.keyCode);

while(userinput.length > secretCode.length){
userinput.shift();
}
if(userinput.join('|') === secretCode.join('|')){
cornify_add();
}
});
</script>

本刊同步於個人網站:http://chestertang.site/

本次範例程式碼原作者來源:https://tinyurl.com/yavm5f5n