JS实现碰撞检测的方法分析


Posted in Javascript onJanuary 19, 2018

本文实例讲述了JS实现碰撞检测的方法。分享给大家供大家参考,具体如下:

一个简单的碰撞检测例子,检测div1是否和div2发生碰撞,当div1碰到div2时,改变div2的颜色,看测试图

JS实现碰撞检测的方法分析

看一下分析图:

JS实现碰撞检测的方法分析

当div1在div2的上边线(t2)以上的区域活动时,始终碰不上
当div1在div2的右边线(r2)以右的区域活动时,始终碰不上
当div1在div2的下边线(b2)以下的区域活动时,始终碰不上
当div1在div2的左边线(r2)以左的区域活动时,始终碰不上

除了以上四种情况,其他情况表示div1和div2碰上了,下面试完整测试代码

HTML部分:

<div id="div1"></div>
<div id="div2"></div>

css部分:

<style>
    #div1{
      width:100px ;height: 100px;background: green;
      position: absolute;
    }
    #div2{
      width:100px ;height: 100px;background: yellow;
      position: absolute;left: 300px;top: 200px;z-index: -1;
    }
</style>

JS部分:

<script>
  window.onload = function () {
    var oDiv = document.getElementById('div1');
    var oDiv2 = document.getElementById('div2');
    var disX = 0;
    var disY = 0;
    oDiv.onmousedown = function (ev) {
      var ev = ev|| window.event;
      disX = ev.clientX - oDiv.offsetLeft;
      disY = ev.clientY - oDiv.offsetTop;
      document.onmousemove = function (ev) {
        var ev = ev|| window.event;
        var t1 = oDiv.offsetTop;
        var l1 = oDiv.offsetLeft;
        var r1 = oDiv.offsetLeft + oDiv.offsetWidth;
        var b1 = oDiv.offsetTop + oDiv.offsetHeight;
        var t2 = oDiv2.offsetTop;
        var l2 = oDiv2.offsetLeft;
        var r2 = oDiv2.offsetLeft + oDiv2.offsetWidth;
        var b2 = oDiv2.offsetTop + oDiv2.offsetHeight;
        if(b1<t2 || l1>r2 || t1>b2 || r1<l2){// 表示没碰上
        }else{
          oDiv2.style.background = 'blue';
        }
        oDiv.style.left = ev.clientX - disX +'px';
        oDiv.style.top = ev.clientY - disY +'px';
      }
      document.onmouseup = function () {
        document.onmousemove = null;
        document.onmouseup = null;
      }
      return false;
    }
  }
</script>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
完美解决IE低版本不支持call与apply的问题
Dec 05 Javascript
window.location 对象所包含的属性
Oct 10 Javascript
node.js中的fs.appendFileSync方法使用说明
Dec 17 Javascript
jQuery制作拼图小游戏
Jan 12 Javascript
jquery跟随屏幕滚动效果的实现代码
Apr 13 Javascript
JS实现超简单的汉字转拼音功能示例
Dec 22 Javascript
JavaScript注册时密码强度校验代码
Jun 30 Javascript
详解vue + vuex + directives实现权限按钮的思路
Oct 24 Javascript
使用JS实现导航切换时高亮显示的示例讲解
Aug 22 Javascript
详解Vue2.0组件的继承与扩展
Nov 23 Javascript
vue中axios的二次封装实例讲解
Oct 14 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
Oct 29 Javascript
angular1配合gulp和bower的使用教程
Jan 19 #Javascript
浏览器调试动态js脚本的方法(图解)
Jan 19 #Javascript
Angular实现搜索框及价格上下限功能
Jan 19 #Javascript
vue 插值 v-once,v-text, v-html详解
Jan 19 #Javascript
web前端vue实现插值文本和输出原始html
Jan 19 #Javascript
解决Linux无法正常安装与卸载Node.js的方法
Jan 19 #Javascript
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
Jan 18 #jQuery
You might like
利用文件属性结合Session实现在线人数统计
2006/10/09 PHP
PHP 中的批处理的实现
2007/06/14 PHP
PHP 函数学习简单小结
2010/07/08 PHP
浅析PHP绘图技术
2013/07/03 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
一段实时更新的时间代码
2006/07/07 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
jquery实现的鼠标下拉滚动置顶效果
2014/07/24 Javascript
jQuery实现的一个自定义Placeholder属性插件
2014/08/11 Javascript
node.js中的console.time方法使用说明
2014/12/09 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
详解Angular2学习笔记之Html属性绑定
2018/01/03 Javascript
微信小程序数字滚动插件使用详解
2018/02/02 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
JS数据类型判断的几种常用方法
2020/07/07 Javascript
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
2018/10/26 Python
python二维键值数组生成转json的例子
2019/12/06 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
python 读取.nii格式图像实例
2020/07/01 Python
Python 没有main函数的原因
2020/07/10 Python
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
香港时尚女装购物网站:ZAFUL
2017/07/19 全球购物
介绍一下UNIX启动过程
2013/11/14 面试题
体育老师的教学自我评价分享
2013/11/19 职场文书
机械绘图员岗位职责
2013/11/19 职场文书
教师试用期自我鉴定
2014/02/12 职场文书
信访工作经验交流材料
2014/05/23 职场文书
销售开票员岗位职责
2015/04/15 职场文书
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL