原生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 相关文章推荐
用js脚本控制asp.net下treeview的NodeCheck的实现代码
Mar 02 Javascript
jquery创建并行对象或者合并对象的实现代码
Oct 10 Javascript
JQueryEasyUI Layout布局框架的使用
Apr 08 Javascript
深入浅析JavaScript的API设计原则
Jun 14 Javascript
微信开发 微信授权详解
Oct 21 Javascript
node前端开发模板引擎Jade的入门
May 11 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
Jun 27 Javascript
Angular angular-file-upload文件上传的示例代码
Aug 23 Javascript
Vue.js的复用组件开发流程完整记录
Nov 29 Javascript
layui按条件隐藏表格列的实例
Sep 19 Javascript
Element-UI+Vue模式使用总结
Jan 02 Javascript
JS内置对象和Math对象知识点详解
Apr 03 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实现用户注册登录功能
2016/10/14 PHP
php获取当前月与上个月月初及月末时间戳的方法
2016/12/05 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
PHP实现简单登录界面
2019/10/23 PHP
javascript showModalDialog模态对话框使用说明
2009/12/31 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
2013/07/31 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
javascript学习指南之回调问题
2016/04/23 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
2016/08/15 Javascript
AngularJs Forms详解及简单示例
2016/09/01 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
2016/11/23 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
Js面试算法详解
2018/04/08 Javascript
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
JS闭包原理与应用经典示例
2018/12/20 Javascript
vue滚动固定顶部及修改样式的实例代码
2019/05/30 Javascript
浅谈JS for循环中使用break和continue的区别
2020/07/21 Javascript
Django中使用group_by的方法
2015/05/26 Python
Python中类型检查的详细介绍
2017/02/13 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
django 将model转换为字典的方法示例
2018/10/16 Python
CSS3的RGBA中关于整数和百分比值的转换
2015/08/04 HTML / CSS
Stubhub英国:购买体育、演唱会和剧院门票
2018/06/10 全球购物
大学生校园创业计划书
2014/02/08 职场文书
餐厅经理岗位职责和岗位目标
2014/02/13 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
清明节寄语2015
2015/03/23 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
公安忠诚教育心得体会
2016/01/23 职场文书