原生JS实现的碰撞检测功能示例


Posted in Javascript onMay 18, 2018

本文实例讲述了原生JS实现的碰撞检测功能。分享给大家供大家参考,具体如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>3water.com JS碰撞检测</title>
<style>
div{width:100px;
  height:100px;
}
#box{background:red; position:absolute; }
#box1{background:green;position:absolute;top:300px; left:300px;}
</style>
<script>
//两个碰撞的盒子。是建立在一个不动的基础上。所以可以根据不动的盒子求出四个方向的left和top值。然后再判断其是否碰撞,且碰撞的过程随时改变其层级,(原需 var 8个变量,现在只需4个变量)
function collText(obj,left,top,obj1){
      var l1=obj.offsetLeft-obj.offsetWidth;
      var t1=obj.offsetTop-obj.offsetHeight;
      var r1=obj.offsetLeft+obj.offsetWidth;
      var b1=obj.offsetTop+obj.offsetHeight;
      if(left<l1||top<t1||left>r1||top>b1){
        obj.style.zIndex=3;
        obj1.style.zIndex=1;
        return true;
      }else{
        obj.style.zIndex=1;
        obj1.style.zIndex=3;
        return false;
      }
};
window.onload=function(){
  var oBox=document.getElementById('box');
  var oBox1=document.getElementById('box1');
  oBox.onmousedown=function(ev){
    var oEvent= ev  ||  event;
    var disX=oEvent.clientX-oBox.offsetLeft;
    var disY=oEvent.clientY-oBox.offsetTop;
    document.onmousemove=function(ev){
      var oEvent= ev ||  event;
      var l=oEvent.clientX-disX;
      var t=oEvent.clientY-disY;
      oBox.style.left=l+'px'  ;
      oBox.style.top=t+'px'  ;
      if(collText(oBox1,l,t,oBox)){
        oBox1.style.background='green';
      }else{
        oBox1.style.background='yellow';
      }
    };
    document.onmouseup=function(){
      document.onmousemove=null;
      document.onmouseup=null;
      oBox.reseaseCapture&&oBox.reseaseCapture();
    };
    oBox.setCapture&&oBox.setCapture();
    return false;
  }
  oBox1.onmousedown=function(ev){
    var oEvent= ev ||  event;
    var disX1=oEvent.clientX-oBox1.offsetLeft;
    var disY1=oEvent.clientY-oBox1.offsetTop;
    document.onmousemove=function(ev){
      var oEvent= ev ||  event;
      var le=oEvent.clientX-disX1;
      var to=oEvent.clientY-disY1;
      oBox1.style.left=le+'px'  ;
      oBox1.style.top=to+'px'  ;
      if(collText(oBox,le,to,oBox1)){
        oBox.style.background='red';
      }else{
        oBox.style.background='#000';
      }
    };
    document.onmouseup=function(){
      document.onmousemove=null;
      document.onmouseup=null;
      oBox1.reseaseCapture&&oBox1.reseaseCapture();
    }
    oBox1.setCapture&&oBox1.setCapture();
    return false;
  }
}
</script>
</head>
<body>
<div id="box"></div>
<div id="box1"></div>
</body>
</html>

这里使用在线HTML/CSS/JavaScript运行工具http://tools.3water.com/code/HtmlJsRun测试运行效果如下(碰撞判定时颜色改变):

 原生JS实现的碰撞检测功能示例

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript中document对象使用详解
Jan 06 Javascript
不能不知道的10个angularjs英文学习网站
Mar 23 Javascript
JS遍历页面所有对象属性及实现方法
Aug 01 Javascript
jQuery常见的选择器及用法介绍
Dec 20 Javascript
javascript内存分配原理实例分析
Apr 10 Javascript
使用SVG基本操作API的实例讲解
Sep 14 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
Sep 12 Javascript
js计算两个日期间的天数月的实例代码
Sep 20 Javascript
小程序封装路由文件和路由方法(5种全解析)
May 26 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
Aug 27 jQuery
layui的数据表格+springmvc实现搜索功能的例子
Sep 28 Javascript
vue实现商品列表的添加删除实例讲解
May 14 Javascript
JS实现json对象数组按对象属性排序操作示例
May 18 #Javascript
vue.js使用3DES加密的方法示例
May 18 #Javascript
JS实现的3des+base64加密解密算法完整示例
May 18 #Javascript
JS实现调用本地摄像头功能示例
May 18 #Javascript
React全家桶环境搭建过程详解
May 18 #Javascript
vue单页开发父子组件传值思路详解
May 18 #Javascript
Node.js Buffer用法解读
May 18 #Javascript
You might like
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
php数组添加与删除单元的常用函数实例分析
2015/02/16 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
理解JavaScript中的事件
2006/09/23 Javascript
基于JQuery的一个简单的鼠标跟随提示效果
2010/09/23 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
js禁止表单重复提交
2017/08/29 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
javascript实现搜索筛选功能实例代码
2020/11/12 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
[02:53]DOTA2亚洲邀请赛 NewBee战队巡礼
2015/02/03 DOTA
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python函数嵌套实例
2014/09/23 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
python OpenCV学习笔记之绘制直方图的方法
2018/02/08 Python
python实现的MySQL增删改查操作实例小结
2018/12/19 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
2019/07/23 Python
python实现kNN算法识别手写体数字的示例代码
2019/08/16 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
win10安装python3.6的常见问题
2020/07/01 Python
浅析python字符串前加r、f、u、l 的区别
2021/01/24 Python
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
师范大学应届生求职信
2013/11/21 职场文书
二手书店创业计划书
2014/01/16 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
2016小学新学期寄语
2015/12/04 职场文书