原生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遍历 table的脚本
Jul 23 Javascript
深入理解JavaScript系列(13) This? Yes,this!
Jan 18 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
Feb 27 Javascript
avascript中的自执行匿名函数应用示例
Sep 15 Javascript
JS控制表单提交的方法
Jul 09 Javascript
jQuery中的each()详细介绍(推荐)
May 25 Javascript
判断数组的最佳方法(推荐)
Oct 11 Javascript
AngularJS学习笔记(三)数据双向绑定的简单实例
Nov 08 Javascript
JS HTML图片显示Canvas 压缩功能
Jul 21 Javascript
用Node写一条配置环境的指令
Nov 14 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
Mar 12 Javascript
vue模块移动组件的实现示例
May 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日期函数date格式化UNIX时间的方法
2015/03/19 PHP
微信公众平台开发实现2048游戏的方法
2015/04/15 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
2017/05/29 PHP
JS中简单的实现像C#中using功能(有源码下载)
2007/01/09 Javascript
jQuery 联动日历实现代码
2012/05/31 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
浅析javascript的return语句
2015/12/15 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
探寻JavaScript中this指针指向
2016/04/23 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
2016/09/27 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
Python检测网站链接是否已存在
2016/04/07 Python
Python中断多重循环的思路总结
2019/10/04 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
Python脚本去除文件的只读性操作
2020/03/05 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
Pytorch转tflite方式
2020/05/25 Python
Pycharm安装python库的方法
2020/11/24 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
写出二分查找算法的两种实现
2013/05/13 面试题
手术室护士自我鉴定
2013/10/14 职场文书
英文自我鉴定
2013/12/10 职场文书
安全生产网格化管理实施方案
2014/03/01 职场文书
2014年计生工作总结
2014/11/21 职场文书
React实现动效弹窗组件
2021/06/21 Javascript
Python加密与解密模块hashlib与hmac
2022/06/05 Python