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

我们可以先定义两个正方形方块,红色的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的上边距,满足这些条件就是未碰上。

用JS实现方块碰撞的更多相关文章

  1. js实现方块弹珠游戏

    下载地址:https://files.cnblogs.com/files/liumaowu/%E5%BC%B9%E4%B8%80%E5%BC%B9%E6%89%93%E6%96%B9%E5%9D%97 ...

  2. js实现方块的碰撞检测

    文章地址:https://www.cnblogs.com/sandraryan/ 个人感觉.方块的碰撞检测比圆形麻烦~~ <!DOCTYPE html> <html lang=&qu ...

  3. js实现小球碰撞游戏

    效果图:  效果图消失只是截的gif图的问题 源码: <!DOCTYPE html> <html lang="en"> <head> <m ...

  4. (原)用pixi.js 实现 方块阵点击后原地自转效果

    源码 各位,请教一个问题,我这个还有BUG,我是想实现,点击一下可以 停止转动,然后再点一下重新转动.而不是一直加速,有没有什么好办法?  PS:问题已经解决,谢谢评论的大神@Antineutrino ...

  5. js 拖拽 碰撞 + 重力 运动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. three.js raycaster射线碰撞的坑 (当canvas大小 不是屏幕大小是解决拾取物体的办法)

    这里只是记录一下坑,方便查阅,内容主要援引自:three.js Raycaster 射线拾取 canvas不占满整屏时射线拾取存在偏差 1. 世界坐标系: 世界坐标系位于屏幕的中心(0,0,0),往右 ...

  7. Canvas+Js制作动量守恒的小球碰撞

    目的:通过js实现小球碰撞并实现动量守恒 canvas我们就不多说了,有用着呢. 我们可以通过canvas画2D图形(圆.方块.三角形等等)3D图形(球体.正方体等待). 当然这只是基础的皮毛而已,c ...

  8. 前端学习:JS面向对象知识学习(图解)

    前端学习:JS面向对象知识学习(图解) 前端学习:JS(面向对象)代码笔记 JS面向对象图解知识全览 创建类和对象 方式1:使用Object()函数 方式2:使用自变量 方式3:使用工厂函数 创建多个 ...

  9. VGA详解及色块碰撞示例

    引言 VGA:video Graphics array,视频图形阵列,阴极射线显像管(CRT)显示器时代产物,很多老显卡.笔记本电脑.投影仪所用接口,已经比较过时. CRT是模拟设备,所以VGA也采用 ...

随机推荐

  1. PWM通过RC低通滤波器模拟DAC

    当我们电路需要DAC而单片机并没有DAC外设时,则可采用PWM通过RC低通滤波器来模拟实现DAC功能. RC低通滤波器 当采用低通滤波器模拟DAC时,PWM频率应远大于RC低通滤波电路的截止频率fc= ...

  2. PSS--待看

    转载:浅谈可移植激励规范(PSS)复用策略_路科验证-CSDN博客 译者按 :当今硬件设计变得愈加复杂,如何创建出足够的测试来保证设计的正确性是每个硬件工程师需要面对的问题.Accellera的可移植 ...

  3. cf16E Fish(状压DP)

    题意: N只FISH.每个回合会有一只FISH吃掉另一个FISH.直到池塘里只剩一只FISH. 给出aij:第i只FISH吃掉第J只FISH的概率. 问每一只FISH是最后存活者的概率. Input ...

  4. 【代码更新】单细胞分析实录(21): 非负矩阵分解(NMF)的R代码实现,只需两步,啥图都有

    1. 起因 之前的代码(单细胞分析实录(17): 非负矩阵分解(NMF)代码演示)没有涉及到python语法,只有4个python命令行,就跟Linux下面的ls grep一样的.然鹅,有几个小伙伴不 ...

  5. win10 python3.8 wxpython.whl 安装步骤

     wxpython是python开发常用图形用户界面(GUI)工具之一,GUI因其直观便捷,对我们提高开发效率一定帮助.这里介绍一下新版本wxPython 4.0.1的安装过程及注意事项. 第1步:下 ...

  6. lua入门之环境搭建、第一个demo

    前言 前段时间因为有些项目功能需要,自己研究了下lua,今天整理下,并以一个demo为示例演示 手机上的运行效果 分为几个步骤来逐步讲解. 1.lua介绍,为什么选择它? 2.环境安装 3.撸一个简单 ...

  7. Spring Ioc 容器初始化过程

    IOC 是如何工作的? 通过 ApplicationContext 创建 Spring 容器,容器读取配置文件 "/beans.xml" 并管理定义的 Bean 实例对象.   通 ...

  8. RabbitMQ 处理过慢,原来是一个 SQL 缓存框架导致的 GC 频繁触发

    一:背景 1. 讲故事 上个月底,有位朋友微信找到我,说他的程序 多线程处理 RabbitMQ 时过慢,帮忙分析下什么原因,截图如下: 这问题抛出来,有点懵逼,没说CPU爆高,也没说内存泄漏,也没说程 ...

  9. 大爽Python入门教程 0-1 安装python

    大爽Python入门公开课教案 点击查看教程总目录 一 如何找到下载地址并下载 下面展示找到下载地址的方法步骤 嫌步骤太慢可直接跳到第4步, 查看详细下载地址 使用搜索引擎搜索python 打开搜索结 ...

  10. jenkins-发送allure邮件测试报告

    1.安装插件 allure-jenkins-plugin  2.在全局工具配置中,配置allure命令行 3.全局工具配置中,添加JDK配置 4.配置slave节点工具(JDK+Allure)-配置在 ...