原生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 相关文章推荐
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
Aug 14 Javascript
如何获取网站icon有哪些可行的方法
Jun 05 Javascript
使用JS画图之点、线、面
Jan 12 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
Sep 01 Javascript
javascript如何写热点图
Dec 08 Javascript
轻松实现JavaScript图片切换
Jan 12 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
Oct 18 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
Apr 08 Javascript
利用原生JavaScript实现造日历轮子实例代码
May 08 Javascript
JavaScript一元正号运算符示例代码
Jun 30 Javascript
vue 出现data-v-xxx的原因及解决
Aug 04 Javascript
四十九个javascript小知识实用技巧
Nov 20 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的变量总结 新手推荐
2011/04/18 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
php计算title标题相似比的方法
2015/07/29 PHP
PHP安装threads多线程扩展基础教程
2015/11/17 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
web前端开发也需要日志
2010/12/09 Javascript
判断用户是否在线的代码
2011/03/05 Javascript
js列举css中所有图标的实现代码
2011/07/04 Javascript
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
2015/11/24 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
Javascript刷新页面的实例
2017/09/23 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
python3.x实现发送邮件功能
2018/05/22 Python
Python实现图片拼接的代码
2018/07/02 Python
python异常处理和日志处理方式
2019/12/24 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
工程测量与监理专业应届生求职信
2013/11/27 职场文书
人事主管岗位职责范本
2013/12/04 职场文书
小学敬老月活动方案
2014/02/11 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
停车位租赁协议书
2014/09/24 职场文书
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记
mysql中如何用命令创建联合唯一索引
2022/04/20 MySQL
MySQL 数据表操作
2022/05/04 MySQL