刻印符文之鍵石,人類藉此提升表達情感精準之能力,然仍有部份人類竟無法分辨在再之差,實無可救藥也。
圖片來源:魯蛋精華
還有人懂大中天梗嗎
本篇原定續介紹鼠輩之不可思議事件,然書寫之時發現若能先紀錄符文鍵石之不可思議事件為優,故本篇將先紀錄鍵石之不可思議事件:keydown
與keyup
,並結合兩事件將拉○達後裔召喚後將天○之城毀滅之術式。
此事件發生於鍵石受力向下之時。此事件搭配事件之屬性,可偵測受力鍵石承載之符文為何,並施以相對應之函式之術。
以下示例施力於特定咒語之鍵石可召喚拉○達之後裔。
const downKeys = document.querySelector(".keys.down");
const keyDownList = [];
const summon = "laputa";
function showPressedKeys(event, keys, direction) {
const key = event.key;
keys.innerHTML += `<div class="key-${direction}">${key}</div>`;
}
function detectSummon(event) {
const key = event.key;
keyDownList.push(key);
const pressedCode = keyDownList.join("");
if (pressedCode.includes(summon)) {
document.querySelector(".laputa").style.opacity = 1;
}
}
window.addEventListener("keydown", (event) => {
showPressedKeys(event, downKeys, "down");
detectSummon(event);
});
分段註釋如下:
選取放置按壓鍵石之元素。
const downKeys = document.querySelector(".keys.down");
定義二變數,一為可儲放已按壓過之鍵石之陣列,另一為召喚咒語。
const keyDownList = [];
const summon = "laputa";
定義函式之術,名為showPressedKeys
與detectSummon
,內容分別為顯示已按壓過之鍵石、偵測是否為召喚咒語。
function showPressedKeys(event, keys, direction) {
const key = event.key;
keys.innerHTML += `<div class="key-${direction}">${key}</div>`;
}
function detectSummon(event) {
const key = event.key;
keyDownList.push(key);
const pressedCode = keyDownList.join("");
if (pressedCode.includes(summon)) {
document.querySelector(".laputa").style.opacity = 1;
}
}
其中函式取用之事件屬性key
為鍵石之符文實值。const key = event.key;
當鍵石為大寫模式時按壓a
可得值為大寫之A
。
規範原文:
KeyboardEvent.key : the key value of the key pressed.
另有一事件屬性code
則為鍵石之位置。
無論鍵石為大小寫模式,按壓鍵石a
,其值皆為KeyA
。
規範原文:
KeyboardEvent.code : the code value associated with the key’s physical placement on the keyboard.
操術板顯示事件如下:
對介面設定事件觀測器以觀測keydown
事件,並施以showPressedKeys
與detectSummon
函式之術。
window.addEventListener("keydown", (event) => {
showPressedKeys(event, downKeys, "down");
detectSummon(event);
});
依序按壓符文之鍵石l
a
p
u
t
a
,即可成功召喚拉○達之後裔。
此事件發生時機與keydown
事件相反,發生於已受力向下之鍵石取消受力而向上復原之時。
以下示例放開特定咒語之鍵石可使拉○達之後裔將天○之城毀滅之術式。
const keyUpList = [];
const spell = "barus";
const upKeys = document.querySelector(".keys.up");
function detectSpell(event) {
const key = event.key;
keyUpList.push(key);
const pressedCode = keyUpList.join("");
if (pressedCode.includes(spell)) {
document.querySelector(".barus").style.opacity = 0;
}
}
window.addEventListener("keyup", (event) => {
showPressedKeys(event, upKeys, "up");
detectSpell(event);
});
由於術式架構與前例相似,故不逐一分段註釋。
稍不同處為函式之術detectSpell
,內容為偵測放開之鍵石是否為毀滅咒語。
對介面設定事件觀測器以觀測keyup
事件,並施以showPressedKeys
與detectSpell
函式之術。
window.addEventListener("keyup", (event) => {
showPressedKeys(event, upKeys, "up");
detectSpell(event);
});
首先可觀察已按壓過之鍵石及已放開之鍵石顯示處,可確認放開之鍵石確實顯示稍晚於按壓之鍵石,而拉○達之後裔確實於按壓鍵石之剎那消失,而非放開鍵石之刻。
依序放開符文之鍵石b
a
r
u
s
,即可成功毀滅天○之城。並可確認天○之城確實於放開鍵石之瞬毀滅,而非按壓鍵石。
https://github.com/CReticulata/2024ithome/tree/main/Day10
刻印符文之鍵石:鍵盤
鼠輩:滑鼠
承載之符文:鍵值
操術板:開發者工具