Limited availability
KeyboardEvent.code
ìì±ì í¤ë³´ëì 물리ì í¤(í¤ë¥¼ ëë¦ì¼ë¡ì¨ ìì±ëë 문ììë ë°ë)를 ëíë
ëë¤. ë¤ì ë§í´ì, ì´ ìì±ì í¤ë³´ëì ë ì´ììì´ë ìì í¤ì ìíì ë³íëë ìí¥ì ë°ì§ ìì ê°ì ë°íí©ëë¤.
ì ë ¥ ì¥ì¹ê° 물리ì í¤ë³´ëê° ìë ê°ì í¤ë³´ë í¹ì ì ê·¼ì± ì¥ì¹ì¸ ê²½ì°, ë¸ë¼ì°ì ë 물리ì ì ë ¥ ì¥ì¹ì ê°ì ì ë ¥ ì¥ì¹ ì¬ì´ì í¸íì±ì ìµëíí기 ìí´ ë¬¼ë¦¬ì í¤ë³´ëë¡ ì¼ì´ë ì ìë ê°ì¥ ëì ê°ë¥ì±ì ê°ì§ ê°ì ë°í ê°ì¼ë¡ ì¤ì í©ëë¤.
ì´ ìì±ì í¤ì ì°ê´ë 문ìë³´ë¤ë ì
ë ¥ ì¥ì¹ ì í¤ì 물리ì ì¸ ìì¹ë¥¼ 기ë°ì¼ë¡ ì²ë¦¬íê³ ì í ë ì ì©í©ëë¤. ì´ë í¹í í¤ë³´ëì í¤ë¥¼ ì¬ì©íì¬ ê²ìí¨ëì ê°ì íê²½ì ì뮬ë ì´ì
íë ê²ìì ì
ë ¥ì ì²ë¦¬í기 ìí ì½ë를 ìì±í ë íí ì¬ì©ë©ëë¤. ê·¸ë¬ë, í¤ ì½ëì ì´ë¦ì´ ì¤ì í¤ì ì¸ìë 문ìë í¤ë¥¼ ëë ì ë ìì±ë 문ìì ì¼ì¹íì§ ìì ì ì기 ë문ì KeyboardEvent.code
ë¡ ë³´ê³ ë ê°ì¼ë¡ í¤ì¤í¸ë¡í¬ì ìí´ ìì±ë 문ì를 ê²°ì íë ¤ê³ ë íë ê²ì 주ìê° íìí©ëë¤.
ì를 ë¤ì´, ì¿¼í° ë ì´ìì í¤ë³´ëìì Q í¤ì ëí´ ë°íëë code
ë "KeyQ
" ì¸ ëìì ëë³´ë½ í¤ë³´ëì ' í¤ë ì ì í° í¤ë³´ëì A í¤ë¥¼ ëë¬ ëíëë code
ì´ê¸°ë í©ëë¤. ì´ë¡ ì¸í´ ì¬ì©ìê° ììë í¤ë³´ë ë ì´ììì ì¬ì©íì§ ìë ê²½ì°, code
ê°ì¼ë¡ í¤ì ì´ë¦ì íì
íë ê²ì´ ë¶ê°ë¥í´ì§ëë¤.
í¤ ì´ë²¤í¸ì ëìëë 문ì를 ê²°ì í기 ìí´ìë KeyboardEvent.key
ìì±ì ëì ì¬ì©íì¬ì¼ í©ëë¤.
ìëì°, 리ë ì¤, ë§¥ ì´ìì²´ì ì ëí ì½ë ê°ì KeyboardEvent: code values íì´ì§ì ëì´ëì´ ììµëë¤.
ìì KeyboardEvent ì°ìµí기 HTML<p>
í¤ë³´ëì ê° í¤ë¥¼ ëë¬ í¤ë³´ë ì´ë²¤í¸ìì í¤ì ì½ëê° ê°ê° ì´ë¤ ê°ì¼ë¡
ëíëëì§ íì¸í´ ë³´ì¸ì.
</p>
<div id="output" tabindex="0"></div>
CSS
#output {
font-family: Arial, Helvetica, sans-serif;
border: 1px solid black;
width: 95%;
margin: auto;
}
#output:focus-visible {
outline: 3px solid dodgerblue;
}
JavaScript
window.addEventListener(
"keydown",
(event) => {
const p = document.createElement("p");
p.textContent = `KeyboardEvent: key='${event.key}' | code='${event.code}'`;
document.getElementById("output").appendChild(p);
window.scrollTo(0, document.body.scrollHeight);
},
true,
);
ê²°ê³¼
í¤ ì ë ¥ì´ ìì ì ì ëë¡ ì ë¬ëëì§ íì¸íë ¤ë©´, í¤ë¥¼ ë르기 ì ì ìëì íìë ìì를 í´ë¦íê±°ë í¬ì»¤ì¤íì¸ì.
ê²ìì¼ë¡ í¤ë³´ë ì´ë²¤í¸ ì²ë¦¬íê¸°ì´ ìì ë "WASD" í¤ë¥¼ ì¬ì©íì¬ ê²ììì ì ì§, ì¢ë¡ ì´ë, íì§, ì°ë¡ ì´ëì¼ë¡ ì¡°ì¢
íë ì
ë ¥ì ì²ë¦¬íë keydown
ì´ë²¤í¸ì ëí ì´ë²¤í¸ 리ì¤ë를 ì²ë¦¬í©ëë¤. ì´ ì¤ì ì ì ì í° í¤ë³´ë를 ì¬ì©íë ê²½ì°ì²ë¼ ì¤ì í´ë¹ 문ìì ê´ê³ìì´ ëì¼í ë¤ ê°ì 물리ì í¤ë¥¼ ì¬ì©íì¬ ëìí©ëë¤.
<p>WASD (AZERTY í¤ë³´ëììë ZQSD) í¤ë¥¼ ì´ì©íì¬ ìì§ì´ê±°ë ì¡°ì¢
í´ë³´ì¸ì.</p>
<svg
xmlns="http://www.w3.org/2000/svg"
version="1.1"
class="world"
tabindex="0">
<polygon id="spaceship" points="15,0 0,30 30,30" />
</svg>
CSS
.world {
margin: 0px;
padding: 0px;
background-color: black;
width: 400px;
height: 400px;
}
.world:focus-visible {
outline: 5px solid dodgerblue;
}
#spaceship {
fill: orange;
stroke: red;
stroke-width: 2px;
}
JavaScript
ìë°ì¤í¬ë¦½í¸ ì½ëì 첫ë²ì§¸ ë¶ë¶ììë ì°ë¦¬ê° ì¬ì©í ë³ì를 ì ìí©ëë¤. shipSize
ë í¸ìì±ì ìí´ íë ì´ì´ê° ì¡°ì¢
íë ì°ì£¼ì ì í¬ê¸°ë¥¼ í¬í¨í©ëë¤. position
ë íë ì´ íë ë´ìì ì°ì£¼ì ì´ ìì§ì´ë ìì¹ë¥¼ ì¶ì í기 ìí´ ì¬ì©ë©ëë¤. moveRate
ë í¤ ì
ë ¥ì ë°ë¼ì ì°ì£¼ì ì´ ì ë°©ì´ë íë°©ì¼ë¡ ì´ëíë í½ì
ì ì를, turnRate
ë í¤ë¥¼ ëë¬ ì¼ìª½ì´ë ì¤ë¥¸ìª½ì¼ë¡ ì¡°ì¢
íë 컨í¸ë¡¤ë¡ ì¸íì¬ ì¼ë§ë íì íëì§ ê°ë를 ëíë
ëë¤. angle
ì íì¬ ì°ì£¼ì ì ì ì©ë íì ê°ëë¡, ì´ë 0° ë (ì§ì§)ìì ììí©ëë¤. ë§ì§ë§ì¼ë¡, spaceship
ì íë ì´ì´ê° ì¡°ì¢
íë ì°ì£¼ì ì SVG í´ë¦¬ê³¤ ììì IDì¸ "spaceship"
ì 참조í©ëë¤.
let shipSize = {
width: 30,
height: 30,
};
let position = {
x: 200,
y: 200,
};
let moveRate = 9;
let turnRate = 5;
let angle = 0;
let spaceship = document.getElementById("spaceship");
ë¤ìì updatePosition()
í¨ìì
ëë¤. ì´ í¨ìë ì°ì£¼ì ì´ ìì§ì¸ 거리를 ì¸ìë¡ ì
ë ¥ë°ì¼ë©° ì ë°©ì¼ë¡ ì´ëíë¤ë©´ ì¸ìë ììë¡, íë°©ì¼ë¡ ì´ëíë¤ë©´ ì¸ìë ììë¡ ì§ì ë©ëë¤. ì´ í¨ìë íì¬ ì°ì£¼ì ì´ í¥íê³ ìë ë°©í¥ì 거리를 기ë°ì¼ë¡ ìë¡ì´ ìì¹ë¥¼ ê³ì°í©ëë¤. ëí ì°ì£¼ì ì´ íë ì´ íë ë´ìì ì¬ë¼ì§ì§ ìê² ê²½ê³ë¥¼ ëì ê²½ì° ë°ë쪽ìì ëíë ì ìëë¡ ì²ë¦¬í©ëë¤.
function updatePosition(offset) {
let rad = angle * (Math.PI / 180);
position.x += Math.sin(rad) * offset;
position.y -= Math.cos(rad) * offset;
if (position.x < 0) {
position.x = 399;
} else if (position.x > 399) {
position.x = 0;
}
if (position.y < 0) {
position.y = 399;
} else if (position.y > 399) {
position.y = 0;
}
}
refresh()
í¨ìë SVG transform ì ì¬ì©íì¬ ì°ì£¼ì ì íì ê³¼ ìì¹ë¥¼ ì ì©í©ëë¤.
function refresh() {
let x = position.x - shipSize.width / 2;
let y = position.y - shipSize.height / 2;
let transform = `translate(${x} ${y}) rotate(${angle} 15 15) `;
spaceship.setAttribute("transform", transform);
}
refresh();
ë§ì§ë§ì¼ë¡, addEventListener()
ë©ìëë keydown
ì´ë²¤í¸ë¥¼ ê°ì§í기 ììíë ë°ì ì¬ì©ëë©°, ê° í¤ì ë°ë¼ ì°ì£¼ì ì ìì¹ì íì ê°ë를 ì
ë°ì´í¸í ë¤, refresh()
í¨ì를 í¸ì¶íì¬ ì°ì£¼ì ì ìë¡ì´ ìì¹ì ê°ë를 ê·¸ë ¤ì¤ëë¤.
window.addEventListener(
"keydown",
(event) => {
if (event.defaultPrevented) {
return; // ì´ë²¤í¸ê° ì´ë¯¸ ì¤íëìë¤ë©´ ì무 ì¼ë ì¼ì´ëì§ ììµëë¤
}
switch (event.code) {
case "KeyS":
case "ArrowDown":
// "íë°© ì ì§" ì²ë¦¬
updatePosition(-moveRate);
break;
case "KeyW":
case "ArrowUp":
// "ì ë°© ì ì§" ì²ë¦¬
updatePosition(moveRate);
break;
case "KeyA":
case "ArrowLeft":
// "ì¼ìª½ì¼ë¡ ì´ë" ì²ë¦¬
angle -= turnRate;
break;
case "KeyD":
case "ArrowRight":
// "ì¤ë¥¸ìª½ì¼ë¡ ì´ë" ì²ë¦¬
angle += turnRate;
break;
}
refresh();
if (event.code !== "Tab") {
// ì´ë²¤í¸ë¥¼ ìë¹íì¬ ì¬ì©ìê° í¬ì»¤ì¤ë¥¼ ì´ëíë ¤ê³ íì§ ìë í
// ì´ë²¤í¸ê° ë ë² ì²ë¦¬ëì§ ìëë¡ í©ëë¤.
event.preventDefault();
}
},
true,
);
ê²°ê³¼
í¤ ì ë ¥ì´ ìì ì ì ëë¡ ì ë¬ëëì§ íì¸íë ¤ë©´, í¤ë¥¼ ë르기 ì ì ìëì íìë ê²ììì íë ì´ íë í´ë¦íê±°ë í¬ì»¤ì¤íì¸ì.
ì´ ì½ë를 ê°ì í ì ìë ëª ê°ì§ ë°©ë²ì´ ììµëë¤. ëë¶ë¶ì ì¤ì ê²ìë¤ì í¤ë¥¼ ë°ë³µíë ëì keydown
ì´ë²¤í¸ë¥¼ ê°ì§íë©°, í´ë¹ ì´ë²¤í¸ê° ë°ìíë©´ ìì§ìì ììíê³ , keyup
ì´ë²¤í¸ê° ë°ìíë©´ ìì§ìì ë©ì¶¥ëë¤. ì´ë¡ ì¸í´ ì´ëì ë¶ëë½ê³ 빨ë¼ì§ì§ë§, ëìì íë ì´ì´ê° ì´ëíë©´ì ì¡°ì¢
í ì ìê² ë©ëë¤. ì°ì£¼ì ì ìì§ìì ë ë¶ëë½ê² ì²ë¦¬í기 ìí´ ì íì´ë ì ëë©ì´ì
ì´ë²¤í¸ë ì¬ì©ë ì ììµëë¤.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4