原生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 相关文章推荐
Jquery 学习笔记(一)
Oct 13 Javascript
利用腾讯的ip地址库做ip物理地址定位
Jul 24 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
Jun 15 Javascript
浅谈EasyUI中编辑treegrid的方法
Mar 01 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
Nov 11 Javascript
简单理解JavaScript中的封装与继承特性
Mar 19 Javascript
JavaScript运动框架 多值运动(四)
May 18 Javascript
JavaScript实现选中文字提示新浪微博分享效果
Jun 15 Javascript
JS实现的简单分页功能示例
Aug 23 Javascript
Vue在页面数据渲染完成之后的调用方法
Sep 11 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
Sep 28 Javascript
解决Layui数据表格显示无数据提示的问题
Nov 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
咖啡知识 咖啡养豆要养多久 排气又是什么
2021/03/06 新手入门
用PHP连mysql和oracle数据库性能比较
2006/10/09 PHP
PHP APC缓存配置、使用详解
2014/03/06 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
PHP实现的获取文件mimes类型工具类示例
2018/04/08 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
2015/11/18 Javascript
node实现的爬虫功能示例
2018/05/04 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
Element Popover 弹出框的使用示例
2020/07/26 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
Python实现统计代码行的方法分析
2017/07/12 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
如何理解Python中包的引入
2020/05/29 Python
纯CSS打造(无图像无js)的非常流行的讲话(语音)气泡效果
2012/12/28 HTML / CSS
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
印度尼西亚手表和包包商店:Urban Icon
2019/12/12 全球购物
英语系本科生求职信范文
2013/12/18 职场文书
销售总经理岗位职责
2014/03/15 职场文书
社区工作者演讲稿
2014/05/23 职场文书
学校教师安全责任书
2014/07/23 职场文书
竞选学委演讲稿
2014/09/13 职场文书
2015年文员个人工作总结
2015/04/09 职场文书
python实现图片九宫格分割的示例
2021/04/25 Python
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL
详解Vue项目的打包方式(生成dist文件)
2022/01/18 Vue.js