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 相关文章推荐
Exitjs获取DataView中图片文件名
Nov 26 Javascript
jquery select下拉框操作的一些说明
Apr 02 Javascript
JavaScript中的一些定位属性[图解]
Jul 14 Javascript
ExtJs的Date格式字符代码
Dec 30 Javascript
js+html+css实现鼠标移动div实例
Jan 30 Javascript
node.js入门教程迷你书、node.js入门web应用开发完全示例
Apr 06 Javascript
angular.foreach 循环方法使用指南
Jan 06 Javascript
JavaScript中的pow()方法使用详解
Jun 15 Javascript
bootstrap侧边栏圆点导航
Jan 11 Javascript
ES6学习之变量的解构赋值
Feb 12 Javascript
微信小程序上线发布流程图文详解
May 06 Javascript
js实现查询商品案例
Jul 22 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
JpGraph php柱状图使用介绍
2011/08/23 PHP
php计算十二星座的函数代码
2012/08/21 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
2013/11/26 PHP
ThinkPHP验证码使用简明教程
2014/03/05 PHP
php基于GD库画五星红旗的方法
2015/02/24 PHP
Zend Framework入门教程之Zend_View组件用法示例
2016/12/09 PHP
一个选择最快的服务器转向代码
2009/04/27 Javascript
Javascript学习笔记 delete运算符
2011/09/13 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
2012/05/24 Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
js输入框使用正则表达式校验输入内容的实例
2017/02/12 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
js css3实现图片拖拽效果
2017/03/04 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
详解webpack中的hash、chunkhash、contenthash区别
2018/01/05 Javascript
vue组件中的数据传递方法
2018/05/14 Javascript
浅谈MySQL中的触发器
2015/05/05 Python
Python中type的构造函数参数含义说明
2015/06/21 Python
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
给儿子的表扬信
2014/01/15 职场文书
爱护公物标语
2014/06/24 职场文书
企业党员个人自我评价
2014/09/20 职场文书
布达拉宫导游词
2015/02/02 职场文书
通知函的格式
2015/04/27 职场文书
单位接收证明格式
2015/06/18 职场文书
实习感想范文
2015/08/10 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
Go语言切片前或中间插入项与内置copy()函数详解
2021/04/27 Golang
Go遍历struct,map,slice的实现
2021/06/13 Golang
在项目中使用redis做缓存的一些思路
2021/09/14 Redis