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 相关文章推荐
使用Node.js为其他程序编写扩展的基本方法
Jun 23 Javascript
JS+CSS实现电子商务网站导航模板效果代码
Sep 10 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
Oct 14 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
Nov 23 Javascript
js+html5实现canvas绘制网页时钟的方法
May 21 Javascript
JS实现输入框提示文字点击时消失效果
Jul 19 Javascript
js注入 黑客之路必备!
Sep 14 Javascript
Vue.js Ajax动态参数与列表显示实现方法
Oct 20 Javascript
js通过classname来获取元素的方法
Nov 24 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
Dec 20 Javascript
Vuex的API文档说明详解
Feb 05 Javascript
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
Jun 23 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
php include,include_once,require,require_once
2008/09/05 PHP
PHP 引用是个坏习惯
2010/03/12 PHP
thinkphp模板用法和内容输出实例
2014/11/28 PHP
学习ExtJS TextField常用方法
2009/10/07 Javascript
js parsefloat parseint 转换函数
2010/01/21 Javascript
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
JavaScript省市联动实现代码
2014/02/15 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
jQuery数据缓存用法分析
2015/02/20 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
2016/08/03 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
vue-cli2.0转3.0之项目搭建的详细步骤
2018/12/11 Javascript
Vue学习之axios的使用方法实例分析
2020/01/06 Javascript
Python高级应用实例对比:高效计算大文件中的最长行的长度
2014/06/08 Python
基于Python的身份证号码自动生成程序
2014/08/15 Python
python实现的简单抽奖系统实例
2015/05/22 Python
Python中shutil模块的学习笔记教程
2017/04/04 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
Python处理时间日期坐标轴过程详解
2019/06/25 Python
Python进阶之迭代器与迭代器切片教程
2020/01/29 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
学生个人的自我评价分享
2013/11/05 职场文书
医学护理毕业生自荐信
2013/11/07 职场文书
大学新闻系求职信
2014/06/03 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书
听证会主持词
2015/07/03 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书