用JS实现方块碰撞

首先我们应用上次的内容——方块拖拽,利用方块拖拽来让两个方块进行碰撞。

我们可以先定义两个正方形方块,红色的div1,绿色的div2,我们来实现当div1碰撞div2时div2的颜色变为黄色

  HTML代码如下:定义方块

复制代码
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 
 4 <head>
 5     <meta charset="UTF-8">
 6     <meta http-equiv="X-UA-Compatible" content="IE=edge">
 7     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 8     <title>Document</title>
 9     <style>
10         body {
11             margin: 0;
12         }
13         #div1 {
14             width: 100px;
15             height: 100px;
16             background: red;
17             position: absolute;
18             left: 0;
19             top: 0;
20         }
21 
22         #div2 {
23             width: 100px;
24             height: 100px;
25             background: green;
26             position: absolute;
27             left: 500px;
28             top: 200px;
29         }
30     </style>
31 </head>
32 
33 <body>
34 <div id="div1"></div>
35 <div id="div2"></div>
36 </body>
37 
38 </html>
复制代码

利用上个文章的的拖拽内容:令div1可以拖拽

复制代码
 1 <script>
 2     var div1 = document.getElementById('div1')
 3     var div2 = document.getElementById('div2')
 4 
 5     div1.onmousedown = function (event) {
 6         var chaX = event.clientX - div1.offsetLeft
 7         var chaY = event.clientY - div1.offsetTop
 8 
 9         document.onmousemove = function (event) {
10             div1.style.left = event.clientX - chaX + 'px'
11             div1.style.top = event.clientY - chaY + 'px'
12         }
13 
14         document.onmouseup = function () {
15             document.onmousemove = null
16         }
17 
18 
19     }
20 
21 
22 </script>
复制代码

因为我们每次拖拽都要判断是否碰撞,我们的碰撞代码应该放在移动的里面

添加后:

复制代码
 1 <script>
 2     var div1 = document.getElementById('div1')
 3     var div2 = document.getElementById('div2')
 4 
 5     div1.onmousedown = function (event) {
 6         var chaX = event.clientX - div1.offsetLeft
 7         var chaY = event.clientY - div1.offsetTop
 8 
 9         document.onmousemove = function (event) {
10             div1.style.left = event.clientX - chaX + 'px'
11             div1.style.top = event.clientY - chaY + 'px'
12 
13             if (div1.offsetLeft + div1.offsetWidth < div2.offsetLeft ||
14                 div2.offsetLeft + div2.offsetWidth < div1.offsetLeft ||
15                 div1.offsetTop + div1.offsetHeight < div2.offsetTop ||
16                 div2.offsetTop + div2.offsetHeight < div1.offsetTop
17             ) {
18                 div2.style.backgroundColor = ''
19             } else {
20                 div2.style.backgroundColor = 'yellow'
21             }
22 
23         }
24         document.onmouseup = function () {
25             document.onmousemove = null
26         }
27     }
28 
29 </script>
复制代码

可以看到我们在移动的代码里添加了判断条件

让div1的左边距加上div1的宽度小于div2的左边距,让div2的左边距加上div2的宽度小于div1的左边距,让div1的上边距加上div1的高度小于div2的上边距,让div2的上边距加上div2的高度小于div1的上边距,满足这些条件就是未碰上。

posted @   Adinsclay  阅读(277)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示