JavaScript 利用键盘事件与定时器实现人物走动控制

作者:微光

时间:2026-10-28

浏览:198

本文介绍如何使用JavaScript结合onkeydown键盘事件与setInterval定时器,实现网页中人物角色的方向控制。通过监听按键码判断上下左右及空格指令,利用定时器周期性替换图片以模拟走动动画,并强调使用clearInterval防止动画加速,提供完整HTML与JS代码示例。

文章目录

JavaScript键盘控制人物移动原理

该示例主要依赖JavaScript中的两个核心机制:键盘按下事件onkeydown以及周期性执行函数setInterval。

实现效果

当用户按下键盘上的特定方向键时,网页中的人物角色会执行对应的动作,从而实现通过键盘控制角色移动的效果。

实现步骤与代码逻辑

实现步骤

第一步:定义按键功能映射。

w:向上移动 s:向下移动 a:向左移动 d:向右移动 空格键:停止移动

第二步:在定义好按键功能后,需要捕获用户的按键事件,并准确判断用户按下的是哪个键。

捕获键盘按下事件可使用onkeydown属性。获取具体的按键代码可使用event.keyCode属性。

第三步:利用setInterval定时器周期性地执行图片替换操作。

替换图片是为了实现角色走动的视觉动画效果。需要注意的是,必须使用clearInterval来清除定时器,否则随着时间推移,动画帧率会不断增加,导致角色移动速度越来越快。

完整示例代码


<html>
	<head>
		<meta charset="utf-8" />
		<title>人物走动</title>
	</head>
	<body onkeydown="show()">
		<ul style="posttion:absolute;border:1px solid #999;list-style:none;width:150px;padding:20px;background:#ffffef;">
			<li>w:向上</li>
			<li>s:向下</li>
			<li>a:向左</li>
			<li>d:向右</li>
			<li>空格:停止</li>
			<li style="margin-top:20px;"><u><a href="https://www.jb51.net">本站</a></u></li>
		</ul>
		<div style="position:absolute;top:0;left:0" id='di'><img src="https://img.jbzj.com/file_images/article/201408/201482791327688.gif?201472791345" id="img"></div>
		<script>
			var img1='//img.jbzj.com/file_images/article/201408/201482791656841.gif?201472791722';
			var img2='//img.jbzj.com/file_images/article/201408/201482791327688.gif?201472791345';
			var x=0;
			var y=0;
			var xs=0;
			var ys=0;
			var flag=true;
			var zq=null;
			function ks(){
				zq=setInterval(function(){	
					var s=document.getElementById('img');	
					var str=s.src;
					var area=document.getElementById('di');
					var xpos=parseInt(area.style.left);
					var ypos=parseInt(area.style.top);
					x=x+xs;
					y=y+ys;
					area.style.left=x;
					area.style.top=y;
					var pos=str.lastIndexOf('/')+1;
					var hz=str.substr(pos);
					if(hz==img1){
						s.src= img2;
					}else{
						s.src= img1;
					}				
				},50);
			}
			ks();

			function show(){
				var sz=window.event.keyCode;
				switch(sz){
					case 87:
						img1='//img.jbzj.com/file_images/article/201408/ren_h_1.gif';
						img2='//img.jbzj.com/file_images/article/201408/ren_h_2.gif';
						ys=-5;
						xs=0;
						break;
					case 65:
						img1='//img.jbzj.com/file_images/article/201408/ren_l_1.gif';
						img2='//img.jbzj.com/file_images/article/201408/ren_l_2.gif';
						xs=-5;
						ys=0;
						break;
					case 68:
						img1='//img.jbzj.com/file_images/article/201408/ren_r_1.gif';
						img2='//img.jbzj.com/file_images/article/201408/ren_r_2.gif';
						xs=5;
						ys=0;
						break;
					case 83:
						img1='//img.jbzj.com/file_images/article/201408/ren_q_1.gif';
						img2='//img.jbzj.com/file_images/article/201408/ren_q_2.gif';
						ys=5;
						xs=0;
						break;
					case 32:
					  if(flag){
						  clearInterval(zq);
						  flag=false;
						  break;
					   }
					case 13:
					 if(!flag){
						 ks();
						 flag=true;
						break;
					  }
				}
			}
		</script>
	</body>
</html>

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章