HTML DOM 事件 —— 键盘事件 JS键盘事件

键盘事件

如果想实现快捷的页面操作,或者是一些前端的游戏,了解键盘事件很重要;
onkeydown 某个键盘按键被按下
onkeypress 某个键盘按键被按下并松开
onkeyup 某个键盘按键被松开

这些键盘事件可以使用于除了
<base>, <bdo>, <br>, <head>, <html>, <iframe>, <meta>, <param>, <script>, <style>, 和 <title>其它所有HTML 元素

键盘键值对应的键值码(ascii码)


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

onkeydown 键盘按下事件

定义和用法:onkeydown 事件会在用户按下一个键盘按键时发生。
如果长按这个按键没松开,那么就会一直调用onkeydown 的方法;
提示: 与 onkeydown 事件相关联的事件触发次序:

  1. onkeydown 键盘按下事件
  2. onkeypress 键盘按下并松开事件
  3. onkeyup 键盘松开事件

下面代码可以通过输入框聚焦之后,获取在键盘上按键的所有值:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>onkeydown</title>
		<script>
			function myFunction() {
				console.log(event) // 对应按键对象所有属性
				document.getElementById("domKey").innerHTML = event.key
				document.getElementById("domCode").innerHTML = event.code
				document.getElementById("domAscii").innerHTML = event.which
			}
		</script>
	</head>
	<body>
		<p>当你在输入框内按下一个按键是函数被触发</p>
		<input type="text" onkeydown="myFunction()">
		<p>按下按键的Key:<span id="domKey"></span></p>
		<p>按下按键的Code:<span id="domCode"></span></p>
		<p>按下按键的ascii码:<span id="domAscii"></span></p>
	</body>
</html>

了解以上代码逻辑之后,实现一个简单的效果:
需求:控制一个小方块在页面中的移动,上 — w,下 — s,左 — a ,右 — d,

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>onkeydown</title>
		<style type="text/css">
			body {
				position: relative;
			}
			#boxId {
				position: absolute;
				top: 60;
				left: 60;
				width: 40px;
				height: 40px;
				border-radius: 50%;
				background-color: red;
			}
		</style>
		<script>
			let domTop = 60; // 初始化
			let domLeft = 60;
			// 这里只做了上和左的碰撞校验
			// 直接将方法丢给body全局触发
			// 一直按住按键也可以一直移动
			function myFunction() {
				let boxDom = document.getElementById("boxId")
				if (event.which == 87) { // 上 w 87
					if (domTop > 0) {
						domTop -= 10;
					}
				} else if (event.which == 68) { // 右 d  68
					domLeft += 10;
				} else if (event.which == 83) { // 下 s 83
					domTop += 10;
				} else if (event.which == 65) { // 左 a 65
					if (domLeft > 0) {
						domLeft -= 10;
					}
				}
				boxDom.style.top = domTop + "px";
				boxDom.style.left = domLeft + "px";
			}
		</script>
	</head>
	<body onkeydown="myFunction()">
		<div id="boxId"></div>
	</body>
</html>

onkeyup 键盘松开事件

onkeyup 事件会在键盘按键被松开时发生
提示:onkeyup 与 onkeydown 的区别:onkeyup 事件只能一次一次的触发,不能像onkeydown 长按持续触发

下面函数将字符转换为大写:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>onkeyup</title>
		<script>
			function myFunction() {
				var x = document.getElementById("fname");
				x.value = x.value.toUpperCase();
			}
		</script>
	</head>
	<body>
		<p>当用户在输入字段释放一个按键时触发函数。函数将字符转换为大写。</p>
		输入你的名称: <input type="text" id="fname" onkeyup="myFunction()">
	</body>
</html>

onkeypress 键盘按键被按下并松开

onkeypress 事件会在键盘按键被按下并释放一个键时发生
注意: 在所有浏览器中 onkeypress 事件只能监听字母和数字,不能监听一些特殊按键(ALT、CTRL、SHIFT、ESC、箭头等)。监听一个用户是否按下按键请使用 onkeydown 事件,所有浏览器都支持 onkeydown 事件

下面函数将字符转换为大写:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>onkeypress</title>
		<script>
			function myFunction() {
				alert("你在输入框内按下一个按键");
			}
		</script>
	</head>
	<body>
		<p>当用户在输入框内按下一个按键时函数被触发</p>
		<input type="text" onkeypress="myFunction()">
	</body>
</html>

以下是一个示例代码,包括了常用的键盘事件事件处理函数: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>键盘事件示例</title> </head> <body> <input type="text" id="input" placeholder="在此输入"> <script> // 获取输入框元素 var input = document.getElementById("input"); // 键盘按下事件处理函数 function keydownHandler(event) { console.log("按下了键:" + event.which); } // 键盘松开事件处理函数 function keyupHandler(event) { console.log("松开了键:" + event.which); } // 输入事件处理函数 function inputHandler(event) { console.log("输入了字符:" + event.data); } // 绑定键盘事件处理函数 input.addEventListener("keydown", keydownHandler); input.addEventListener("keyup", keyupHandler); input.addEventListener("input", inputHandler); </script> </body> </html> ``` 在这个示例中,我们使用了 `addEventListener` 方法来为输入框元素绑定了三个事件处理函数: - `keydownHandler`:处理键盘按下事件,当用户按下键盘上的任意一个键时调用; - `keyupHandler`:处理键盘松开事件,当用户松开键盘上的任意一个键时调用; - `inputHandler`:处理输入事件,当用户在输入框中输入任意字符时调用。 这些事件处理函数都带有一个事件对象作为参数,可以通过这个对象来获取用户按下的键的值、输入的字符等信息。在这个示例中,我们使用 `console.log` 方法来将这些信息输出到浏览器控制台,以便于调试和测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值