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 相关文章推荐
关于JavaScript的面向对象和继承有利新手学习
Jan 11 Javascript
Jquery实现瀑布流布局(备有详细注释)
Jul 31 Javascript
jQuery实用技巧必备(中)
Nov 03 Javascript
js实现精确到秒的倒计时效果
May 29 Javascript
JavaScript 中有关数组对象的方法(详解)
Aug 15 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
Dec 02 Javascript
原生js实现新闻列表展开/收起全文功能
Jan 20 Javascript
react开发中如何使用require.ensure加载es6风格的组件
May 09 Javascript
微信小程序实现张图片合成为一张并下载
Jul 16 Javascript
JS typeof fn === 'function' &amp;&amp; fn()详解
Aug 22 Javascript
JS Canvas接口和动画效果大全
Apr 29 Javascript
js 数组 fill() 填充方法
Nov 02 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
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
php判断ip黑名单程序代码实例
2014/02/24 PHP
php使用百度ping服务代码实例
2014/06/19 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
WampServer搭建php环境时遇到的问题汇总
2015/07/23 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
2015/12/17 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
jQuery中Ajax的load方法详解
2015/01/14 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
微信小程序缓存过期时间的使用详情
2019/05/12 Javascript
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
Python3.6简单反射操作示例
2018/06/14 Python
python数据处理 根据颜色对图片进行分类的方法
2018/12/08 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
2018/12/29 Python
python实现图书借阅系统
2019/02/20 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
python如何安装下载后的模块
2020/07/03 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
上班睡觉检讨书
2014/01/09 职场文书
工作总结与自我评价
2014/09/18 职场文书
初中家长评语和期望
2014/12/26 职场文书
2015年全国科普日活动总结
2015/03/23 职场文书
【海涛解说】史上最给力比赛,挑战DOTA极限
2022/04/01 DOTA