原生js实现碰撞检测


Posted in Javascript onMarch 12, 2020

本文实例为大家分享了js实现碰撞检测的具体代码,供大家参考,具体内容如下

随手写了个简单的碰撞检测的代码。检测box1和box2是否发生碰撞,若发生碰撞,box2颜色发生随机改变,并反弹到随机位置。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .box1,.box2{
      width: 100px;
      height: 100px;
      background-color: #f00;
      position:absolute;
    }
    .box2{
      background-color: #00f;
      left: 200px;
      top: 200px;
    }
    
  </style>
</head>
<body>
  <div class="box1"></div>
  <div class="box2"></div>
</body>
<script>
  var box1=document.querySelector(".box1");
  var box2=document.querySelector(".box2");
  box1.addEventListener("mousedown",mouseHandler);
  function mouseHandler(e){
    if(e.type==="mousedown"){
      e.preventDefault();
      document.elem=this;
      document.pointX= e.offsetX;
      document.pointY= e.offsetY;
      document.addEventListener("mousemove",mouseHandler);
      this.addEventListener("mouseup",mouseHandler);
    }else if(e.type==="mousemove"){
      this.elem.style.left= e.x-this.pointX+"px";
      this.elem.style.top= e.y-this.pointY+"px";
      hitText(this.elem,box2);
    }else if(e.type==="mouseup"){
      document.removeEventListener("mousemove",mouseHandler);
      this.removeEventListener("mouseup",mouseHandler);
    }
  }
  function hitText(elem1,elem2){
    var rect1=elem1.getBoundingClientRect();
    var rect2=elem2.getBoundingClientRect();
    var ponit1={x:rect1.x,y:rect1.y};
    var ponit4={x:rect1.x+rect1.width,y:rect1.y+rect1.height};
    if(
      ponit4.x>rect2.x
        &&ponit1.x<(rect2.x+rect2.width)
        &&ponit4.y>rect2.y
        &&ponit1.y<(rect2.y+rect2.height)){
      elem2.style.backgroundColor=randomColor();
      elem2.style.left=Math.round(Math.random()*document.documentElement.clientWidth)+"px";
      elem2.style.top=Math.round(Math.random()*document.documentElement.clientHeight)+"px";
    }
  }
  function randomColor(){
    var a=Math.round(Math.random()*255);
    var b=Math.round(Math.random()*255);
    var c=Math.round(Math.random()*255);
    var color="rgb("+ a+","+b+","+c+")";
    return color;
  }
</script>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
跨浏览器的设置innerHTML方法
Sep 18 Javascript
Javascript 两个窗体之间传值实现代码
Sep 25 Javascript
IE本地存储userdata的一个bug说明
Jul 01 Javascript
HTML颜色选择器实现代码
Nov 23 Javascript
js动态为代码着色显示行号
May 29 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
Jul 01 Javascript
jQuery实现图片放大预览实现原理及代码
Sep 12 Javascript
node.js入门教程
Jun 01 Javascript
jQuery文字横向滚动效果的实现代码
May 31 Javascript
原生js实现class的添加和删除简单代码
Jul 12 Javascript
vue中的非父子间的通讯问题简单的实例代码
Jul 19 Javascript
微信小程序云开发详细教程
May 16 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
Mar 12 #Javascript
three.js利用射线Raycaster进行碰撞检测
Mar 12 #Javascript
JS实现碰撞检测效果
Mar 12 #Javascript
使用JS实现动态时钟
Mar 12 #Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
Mar 12 #Javascript
js实现动态时钟
Mar 12 #Javascript
package.json各个属性说明详解
Mar 11 #Javascript
You might like
php查找任何页面上的所有链接的方法
2013/12/03 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
2015/10/27 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
JavaScript常用小技巧小结
2014/12/29 Javascript
Node.js中的process.nextTick使用实例
2015/06/25 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
Django Rest framework之权限的实现示例
2018/12/17 Python
python使用opencv对图像mask处理的方法
2019/07/05 Python
python字典排序的方法
2019/10/12 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
浅谈django框架集成swagger以及自定义参数问题
2020/07/07 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
Vuori官网:运动服装的终级表现
2021/01/27 全球购物
傲盾软件面试题
2015/08/17 面试题
大学生专科毕业生自我评价
2013/11/17 职场文书
一体化教学实施方案
2014/05/10 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
廉洁自律承诺书2016
2016/03/25 职场文书
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis