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 相关文章推荐
javascript模仿msgbox提示效果代码
Jun 10 Javascript
JavaScript学习笔记(十七)js 优化
Feb 04 Javascript
ExtJS判断IE浏览器类型的方法
Feb 10 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
Feb 22 Javascript
jQuery如何使用自动触发事件trigger
Nov 29 Javascript
BootStrap实现手机端轮播图左右滑动事件
Oct 13 Javascript
jQuery实现元素的插入
Feb 27 Javascript
Angular.JS去掉访问路径URL中的#号详解
Mar 30 Javascript
Vue.js搭建移动端购物车界面
Jun 28 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
Apr 23 Javascript
jQuery属性选择器用法实例分析
Jun 28 jQuery
如何利用javascript接收json信息并进行处理
Aug 06 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求小于1000的所有水仙花数的代码
2012/01/10 PHP
我的php学习笔记(毕业设计)
2012/02/21 PHP
php验证session无效的解决方法
2014/11/04 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
PHP生成图表pChart的示例解析
2020/07/31 PHP
javascript完美拖拽的实现方法
2013/09/29 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
js实现prototype扩展的方法(字符串,日期,数组扩展)
2016/01/14 Javascript
Augularjs-起步详解
2016/07/08 Javascript
简单的渐变轮播插件
2017/01/12 Javascript
jQuery plugin animsition使用小结
2017/09/14 jQuery
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
vue--点击当前增加class,其他删除class的方法
2018/09/15 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
python flask实现分页效果
2017/06/27 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
2018/02/24 Python
Python将多个list合并为1个list的方法
2018/06/27 Python
python实现linux下抓包并存库功能
2018/07/18 Python
Django中使用第三方登录的示例代码
2018/08/20 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
Python对象的属性访问过程详解
2020/03/05 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
大型晚会策划方案
2014/02/06 职场文书
需求分析说明书
2014/05/09 职场文书
运动会加油稿100字
2014/09/19 职场文书
招标授权委托书样本
2014/09/23 职场文书
群众路线教育实践活动调研报告
2014/11/03 职场文书
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python