原生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 树控件 比较好用
Jun 11 Javascript
javascript两段代码,两个小技巧
Feb 04 Javascript
初窥JQuery-Jquery简介 入门了解篇
Nov 25 Javascript
jQuery实现精美的多级下拉菜单特效
Mar 14 Javascript
jquery中attr和prop的区别分析
Mar 16 Javascript
JavaScript html5 canvas绘制时钟效果(二)
Mar 27 Javascript
IE下JS保存图片的简单实例
Jul 15 Javascript
JS设计模式之访问者模式定义与用法分析
Feb 05 Javascript
浅谈Webpack 持久化缓存实践
Mar 22 Javascript
vue实现扫码功能
Jan 17 Javascript
简单了解vue 插值表达式Mustache
Jul 22 Javascript
Vue2.0搭建脚手架
Mar 13 Vue.js
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
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
php获取json数据所有的节点路径
2015/05/17 PHP
header与缓冲区之间的深层次分析
2016/07/30 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
2016/11/09 Javascript
JS实现的随机排序功能算法示例
2017/06/09 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
jQuery实现增删改查
2020/12/22 jQuery
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
python字典排序实例详解
2015/05/20 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
Python3 执行Linux Bash命令的方法
2019/07/12 Python
Django 实现前端图片压缩功能的方法
2019/08/07 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
中国医药集团国药在线:国药网
2017/02/06 全球购物
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
求职简历中个人的自我评价
2013/12/01 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
招标承诺书
2014/08/30 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书