原生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 相关文章推荐
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
Feb 14 Javascript
JAVASCRIPT IE 与 FF中兼容问题小结
Feb 18 Javascript
情人节之礼 js项链效果
Feb 13 Javascript
javascript如何使用bind指定接收者
May 04 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
May 29 Javascript
js获取腾讯视频ID的方法
Oct 03 Javascript
关于js函数解释(包括内嵌,对象等)
Nov 20 Javascript
前端开发之CSS原理详解
Mar 11 Javascript
vue引入swiper插件的使用实例
Jul 19 Javascript
javascript 日期相减-在线教程(附代码)
Aug 17 Javascript
JavaScript this使用方法图解
Feb 04 Javascript
用Javascript实现发送短信验证码间隔功能
Feb 08 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
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
JavaScript使用RegExp进行正则匹配的方法
2015/07/11 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
javascript中使用未定义变量或值的情况分析
2016/07/19 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
利用select实现年月日三级联动的日期选择效果【推荐】
2016/12/13 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
Vue配置marked链接添加target=&quot;_blank&quot;的方法
2019/07/19 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
javascript canvas时钟模拟器
2020/07/13 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
[52:03]Secret vs VG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python中实现定制类的特殊方法总结
2014/09/28 Python
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
Python编程对列表中字典元素进行排序的方法详解
2017/05/26 Python
Python判断两个对象相等的原理
2017/12/12 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
Django 重写用户模型的实现
2019/07/29 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
HTML5全屏(Fullscreen)API详细介绍
2015/04/24 HTML / CSS
二年级体育教学反思
2014/01/15 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书
大学生党课心得体会
2016/01/07 职场文书
2016廉洁从政心得体会
2016/01/19 职场文书
redis 查看所有的key方式
2021/05/07 Redis
tomcat的catalina.out日志按自定义时间格式进行分割的操作方法
2022/04/02 Servers
pycharm无法安装cv2模块问题
2022/05/20 Python
GPU服务器的多用户配置方法
2022/07/07 Servers