JavaScript 实现基于九宫格原理的碰撞检测

作者:像素猫

时间:2026-10-23

浏览:97

本文详细介绍如何使用 JavaScript 实现两个 div 元素的碰撞检测。通过引入九宫格概念,将复杂的碰撞判断简化为边界位置比较,以未碰撞条件为基准进行逻辑判断。文章提供了完整的 HTML 和 JS 代码示例,展示如何动态改变元素颜色以反馈碰撞状态,适合前端初学者参考学习。

文章目录

JavaScript 碰撞检测实现原理

本文分享了一段使用 JavaScript 实现碰撞检测的具体代码示例,供读者参考学习。


<html>
<head>
<style>
#div1 {width:100px; height:100px; background:red; position:absolute; z-index:2;}
#div2 {width:100px; height:100px; background:yellow; position:absolute; left:230px; top:220px; z-index:1;}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script>
window.οnlοad=function ()
{
 var oDiv=document.getElementById('div1');
 var oDiv2=document.getElementById('div2');
 
 oDiv.οnmοusedοwn=function (ev)
 {
 var oEvent=ev||event;
 var disX=oEvent.clientX-oDiv.offsetLeft;
 var disY=oEvent.clientY-oDiv.offsetTop;
 
 document.οnmοusemοve=function (ev)
 {
  var oEvent=ev||event;
  
  oDiv.style.left=oEvent.clientX-disX+'px';
  oDiv.style.top=oEvent.clientY-disY+'px';
  
  var l1=oDiv.offsetLeft;//红块左边线
  var r1=oDiv.offsetLeft+oDiv.offsetWidth;//红块右边线
  var t1=oDiv.offsetTop;//红块上边线
  var b1=oDiv.offsetTop+oDiv.offsetHeight;//红块下边线
  
  var l2=oDiv2.offsetLeft;//黄块左边线
  var r2=oDiv2.offsetLeft+oDiv2.offsetWidth;//黄块右边线
  var t2=oDiv2.offsetTop;//黄块上边线
  var b2=oDiv2.offsetTop+oDiv2.offsetHeight;//黄块下边线
  
  if(r1<l2 || l1>r2 || b1<t2 || t1>b2)
  {
  oDiv2.style.background='yellow';
  }
  else
  {
  oDiv2.style.background='green';
  }
 };
 
 document.οnmοuseup=function ()
 {
  document.οnmοusemοve=null;
  document.οnmοuseup=null;
 };
 };
};
</script>
</head>
 
<body>
<div id="div1"></div>
<div id="div2"></div>
</body>
</html>

JavaScript 碰撞检测实现原理

碰撞检测的基本原理如图所示:

在进行碰撞判断时,直接检测“已碰撞”状态逻辑较为复杂,因此本文采用逆向思维,以“未碰撞”作为判断条件。通过引入九宫格模型,当红色 div 位于黄色 div 的左、右、上、下四条边界线之外时,即可判定两者未发生碰撞。只要上述四个“未碰撞”条件均不成立,即意味着两个 div 发生了重叠,此时将黄色 div 的颜色变为绿色以作标识。

以上就是本文的全部内容,希望对读者的学习有所帮助,同时也欢迎支持本站。

实用工具推荐

电子包浆

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

使用 ›
图片压缩

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

使用 ›
相关文章