原生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 相关文章推荐
IE下使用cloneNode注意事项分享
Nov 22 Javascript
JavaScript中的style.display属性操作
Mar 27 Javascript
js获取某月的最后一天日期的简单实例
Jun 22 Javascript
jQuery实现HTML5 placeholder效果实例
Dec 09 Javascript
在JavaScript中操作时间之setYear()方法的使用
Jun 12 Javascript
vuejs父子组件通信的问题
Jan 11 Javascript
Vue中android4.4不兼容问题的解决方法
Sep 04 Javascript
详解react阻止无效重渲染的多种方式
Dec 11 Javascript
vue项目中使用scss的方法步骤
May 16 Javascript
vue+elementUI实现图片上传功能
Aug 20 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
Feb 12 Javascript
es6数组includes()用法实例分析
Apr 18 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
php下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
PHP模拟asp中response类实现方法
2015/08/08 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
PHP常见字符串操作函数与用法总结
2019/03/04 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
js循环改变div颜色具体方法
2013/06/25 Javascript
深入理解jQuery中live与bind方法的区别
2013/12/18 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
jQuery 选择器详解
2015/01/19 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
react中fetch之cors跨域请求的实现方法
2018/03/14 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
2018/05/02 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
2018/10/09 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
2019/03/07 jQuery
微信小程序实现人脸识别登陆的示例代码
2019/04/02 Javascript
js制作提示框插件
2020/12/24 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
python3.7环境下安装Anaconda的教程图解
2019/09/10 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
python温度转换华氏温度实现代码
2020/12/06 Python
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
Mistine官方海外旗舰店:泰国国民彩妆品牌
2016/12/28 全球购物
面试求职的个人自我评价
2013/11/16 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
环保志愿者活动总结
2014/06/27 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
2015年防汛工作总结
2015/05/15 职场文书