JavaScript实现躲避下落纸片的简易小游戏
作者:异步漫步时间:2026-10-22 04:36:33浏览:299
本文介绍如何使用JavaScript的onmousemove鼠标移动事件与setInterval定时器制作一个躲避下落纸片的简易游戏。通过控制角色位置并实时检测与下落物体的碰撞,实现游戏结束逻辑,适合初学者理解DOM操作与事件处理。
前言与游戏构思
前言
事件机制与核心逻辑
近期在研究JavaScript中的事件机制。此前已接触过单击事件(onclick)、表单聚焦(onfocus)及失焦(onblur)等常见事件。最近了解到鼠标移动事件(onmousemove),觉得其交互性很强,因此萌生了一个制作小游戏的想法。该游戏结合了setInterval函数,玩法简单:屏幕上方不断掉落纸片,玩家需控制小人躲避。一旦纸片与小人发生碰撞,游戏即判定为失败(Game Over)。
代码实现
具体实现代码如下:
HTML与CSS样式结构
<!DOCTYPE html>
<html>
<head>
<style>
.move
{
margin-top: 0px;
width:40px;
height: 50px;
background: #ff0;
position:absolute;
z-index: 999;
}
.self
{
width:40px;
height: 50px;
background: #f0f;
position:absolute;
margin-top: 600px;
margin-left: 643px;
z-index: 999;
}
.self img
{
width:40px;
height: 50px;
border-radius: 20px;
}
</style>
<title>图图up up</title>
</head>
<body onload="moveDiv()">
<!--12个div就是空中的小纸片-->
<div class="move" style="margin-left:100px">
</div>
<div class="move" style="margin-left:200px">
</div>
<div class="move" style="margin-left:300px">
</div>
<div class="move" style="margin-left:400px">
</div>
<div class="move" style="margin-left:500px">
</div>
<div class="move" style="margin-left:600px">
</div>
<div class="move" style="margin-left:700px">
</div>
<div class="move" style="margin-left:800px">
</div>
<div class="move" style="margin-left:900px">
</div>
<div class="move" style="margin-left:1000px">
</div>
<div class="move" style="margin-left:1100px">
</div>
<div class="move" style="margin-left:1200px">
</div>
<!--小人儿用一张图片代替-->
<div id="self" class="self">
<img src="images/tutu.jpg">
</div>
</body>
<script type="text/javascript">
var alldiv = document.querySelectorAll('.move');
var selfdiv = document.getElementById("self");
var timer, flag;
function moveItem()
{
//用随机数决定哪一张纸片掉落
for (var j = 0; j < Math.round(Math.random()*11); j++)
{
var i = Math.round(Math.random()*11);
alldiv[i].style.top = alldiv[i].offsetTop + 20 +"px";
//掉落过程中改变纸片的颜色
var rgb='rgb('+Math.floor(Math.random()*255)+','
+Math.floor(Math.random()*255)+','
+Math.floor(Math.random()*255)+')';
alldiv[i].style.backgroundColor = rgb;
if (alldiv[i].offsetTop >= 600)
{
alldiv[i].style.top = "50px"; //当纸片落到底部,又重新回到起点
}
}
}
function moveDiv()
{
timer = setInterval(moveItem,20); //每隔20ms掉落
flag = setInterval(meeting,1); //间隔1ms判断是否相撞
}
var selfdiv = document.getElementById("self");
selfdiv.onmousedown = function(e) //鼠标点击小人儿开始移动
{
document.onmousemove = function(e) //小人儿跟着鼠标移动
{
if (e.clientY > 600)
{
selfdiv.style.marginTop = "600px"; //如果到达屏幕底部就不再往下
}
else if(e.clientX > 1300)
{
selfdiv.style.marginLeft = "1300px"; //到达最右部就回到不再往右
}
else
{
//小人儿的位置始终等于鼠标的位置
selfdiv.style.marginTop = e.clientY + "px";
selfdiv.style.marginLeft = e.clientX + "px";
}
}
}
function meeting()
{
for (var i = 0; i < alldiv.length; i++)
{
//判断是否相撞
if (Math.abs(alldiv[i].offsetTop-selfdiv.offsetTop) <= 50 &&
Math.abs(alldiv[i].offsetLeft-selfdiv.offsetLeft) <= 40)
{
clearInterval(flag);
clearInterval(timer);
alert("一不小心撞到了!!!游戏结束");
}
}
}
</script>
</html>运行效果展示
运行效果如下图所示:

动图制作心得
完整代码即上述部分。由于初次制作动图,效果可能不够完美,但发现许多在线工具可以免费且简单地生成动图,这让我感到非常开心。
总结
总结
以上即为本文的全部内容。希望这篇关于JavaScript事件应用的文章能对各位的学习或工作有所启发。如有任何疑问,欢迎在评论区留言交流,感谢大家的支持。
作者最新文章
D3.js 比例尺与坐标轴的配置详解
2026-11-05 16:54:46
JavaScript怎么遍历对象的Symbol键和不可枚举属性
2026-11-05 13:13:39
封装一个健壮的JS字符串判空工具函数
2026-11-05 12:16:14
JavaScript合并数组的三种常用方法:concat、扩展运算符与push
2026-11-05 11:22:29
JavaScript立即执行函数(IIFE)是什么及基本语法
2026-11-05 10:51:19
