JavaScript碰撞检测原理及其实现代码


Posted in Javascript onMarch 12, 2020

本文实例为大家分享了JavaScript实现碰撞检测原的具体代码,供大家参考,具体内容如下

1.模拟碰撞

简单模拟碰撞过程,用一个可以拖拽的div2去尝试碰撞一个固定的div1(均用绝对定位)

2.碰撞检测原理

JavaScript碰撞检测原理及其实现代码

如图所示:
使得div分别有4个距离属性( L(left),T(top),R(right),B(bottom) ).
对于div1来说,画出一个九宫格,div2在除中心以为的8个格子任意移动都不会发送碰撞.

JavaScript碰撞检测原理及其实现代码

也就是说,只要满足条件:oDiv2.div2R小于oDiv1.div1L|| oDiv2.div2L大于oDiv1.div1R || oDiv2.div2B小于oDiv1.div1T|| oDiv2.div2T大于oDiv1.div1B就不会发送碰撞

3.具体测试代码

<html>
<head>
 <title></title>
 <style type="text/css">
 body{margin: 0;padding: 0;}
 #div2{height: 100px;width: 200px;background-color: orange;position: absolute;left: 0px;top:0px;z-index: 1;}
 #div1{height: 100px;width: 100px;background-color: #a6e22e;position: absolute;left: 600px;top:400px;}
 </style>
 <script type="text/javascript">
 //获取对象样式属性值
 function getObjStyle(obj,attr)
 {
  return getComputedStyle(obj)?getComputedStyle(obj)[attr]:obj.currentStyle[attr];
 }
 </script>
 <script type="text/javascript">
 window.οnlοad=function (){
  var oDiv1=document.getElementById('div1');
  var oDiv2=document.getElementById('div2');



  oDiv2.οnmοusedοwn=function (onEvent,obj){//对div1实现拖拽,并对碰撞进行检测
   obj=this;
   var ev=onEvent||event;
   var distance={};
   distance.disX=ev.clientX-obj.offsetLeft;//到左边框的距离
   distance.disY=ev.clientY-obj.offsetTop;//到上边框的距离

   //获取div1的四个值
   oDiv1.div1L=getObjStyle(oDiv1,'left');
   oDiv1.div1R=parseInt(getObjStyle(oDiv1,'left'))+parseInt(getObjStyle(oDiv1,'width'))+'px';
   oDiv1.div1T=getObjStyle(oDiv1,'top');
   oDiv1.div1B=parseInt(getObjStyle(oDiv1,'top'))+parseInt(getObjStyle(oDiv1,'height'))+'px';




   if(obj.setCapture)
    obj.setCapture();

   document.οnmοusemοve=function (onEvent){
    var ev=onEvent||event;
    obj.style.left=ev.clientX-distance.disX+'px';
    obj.style.top=ev.clientY-distance.disY+'px';

    //获取div2的四个值
    oDiv2.div2L=getObjStyle(oDiv2,'left');
    oDiv2.div2R=parseInt(getObjStyle(oDiv2,'left'))+parseInt(getObjStyle(oDiv2,'width'))+'px';
    oDiv2.div2T=getObjStyle(oDiv2,'top');
    oDiv2.div2B=parseInt(getObjStyle(oDiv2,'top'))+parseInt(getObjStyle(oDiv2,'height'))+'px';

    /*console.log('oDiv2.div2L:'+oDiv2.div2L+' oDiv2.div2R:'+oDiv2.div2R+' oDiv2.div2T:'+oDiv2.div2T+' oDiv2.div2B:'+oDiv2.div2B);*/

    //碰撞检测
    if(oDiv2.div2R<oDiv1.div1L || oDiv2.div2L>oDiv1.div1R || oDiv2.div2B<oDiv1.div1T || oDiv2.div2T>oDiv1.div1B){
     //未发送碰撞
    }else{
     //发生碰撞
     alert('发生碰撞');
    }

   }

   document.οnmοuseup=function (){
    document.οnmοuseup=document.οnmοusemοve=null;
    if(obj.setCapture)
     obj.releaseCapture();
   }
   return false;
  }
 }
 </script>
</head>
<body>
 <div id="div2">div2</div>
 <div id="div1">div1</div>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Js nodeType 属性全面解析
Nov 14 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
Nov 26 Javascript
node.js中的fs.unlink方法使用说明
Dec 15 Javascript
微信小程序  modal详解及实例代码
Nov 09 Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
Dec 30 Javascript
canvas实现弧形可拖动进度条效果
May 11 Javascript
JavaScript判断变量名是否存在数组中的实例
Dec 28 Javascript
原生JS封装_new函数实现new关键字的功能
Aug 12 Javascript
送你43道JS面试题(收藏)
Jun 17 Javascript
JS document内容及样式操作完整示例
Jan 14 Javascript
Angular CLI发布路径的配置项浅析
Mar 29 Javascript
JavaScript实现多个物体同时运动
Mar 12 #Javascript
基于javascript实现碰撞检测
Mar 12 #Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
Mar 12 #jQuery
js 使用ajax设置和获取自定义header信息的方法小结
Mar 12 #Javascript
javascript实现拖拽碰撞检测
Mar 12 #Javascript
原生js实现碰撞检测
Mar 12 #Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
Mar 12 #Javascript
You might like
基于mysql的论坛(2)
2006/10/09 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
解析PHP中$_FILES的使用以及注意事项
2013/07/05 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
php实现数组重复数字统计实例
2018/09/30 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
2016/11/21 NodeJs
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
vue仿淘宝订单状态的tab切换效果
2020/06/23 Javascript
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
Vue程序调试的方法
2019/06/17 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
python 实现目录复制的三种小结
2019/12/04 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
美国体育用品商店:Academy Sports + Outdoors
2020/01/04 全球购物
校长岗位职责
2013/11/26 职场文书
母亲七十大寿答谢词
2014/01/18 职场文书
委托书的写法
2014/09/16 职场文书
公司股份合作协议书
2014/12/07 职场文书
慰问信模板
2015/02/14 职场文书
公司保洁员管理制度
2015/08/04 职场文书
幼儿教师三分钟演讲稿
2019/06/21 职场文书
进行数据处理的6个 Python 代码块分享
2022/04/06 Python