原生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 相关文章推荐
JavaScript实现将数组中所有元素连接成一个字符串的方法
Apr 06 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
Jun 19 Javascript
JavaScript数据库TaffyDB用法实例分析
Jul 27 Javascript
原生js与jQuery实现简单的tab切换特效对比
Jul 30 Javascript
jQuery操作iframe中js函数的方法小结
Jul 06 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
Aug 29 Javascript
微信小程序  生命周期详解
Oct 27 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
Nov 05 Javascript
JS实现图片上传预览功能
Nov 21 Javascript
整理关于Bootstrap列表组的慕课笔记
Mar 29 Javascript
fetch 使用及如何接收JS传值
Nov 11 Javascript
JS的函数调用栈stack size的计算方法
Jun 24 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
资料注册后发信小技巧
2006/10/09 PHP
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
PHP中文乱码解决方案
2015/03/05 PHP
PHP封装的HttpClient类用法实例
2015/06/17 PHP
PHP面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
PHP实现获取url地址中顶级域名的方法示例
2019/06/05 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
js文字滚动停顿效果代码
2008/06/28 Javascript
javascript实现获取cookie过期时间的变通方法
2014/08/14 Javascript
NodeJS制作爬虫全过程(续)
2014/12/22 NodeJs
深入浅出理解javaScript原型链
2015/05/09 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
2016/12/17 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
bootstrap suggest搜索建议插件使用详解
2017/03/25 Javascript
JavaScript之DOM_动力节点Java学院整理
2017/07/03 Javascript
EasyUI Tree树组件无限循环的解决方法
2017/09/27 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
2020/09/04 Javascript
使用Python的内建模块collections的教程
2015/04/28 Python
Python Requests 基础入门
2016/04/07 Python
剖析Python的Twisted框架的核心特性
2016/05/25 Python
Python设计模式之工厂模式简单示例
2018/01/09 Python
python读取csv和txt数据转换成向量的实例
2019/02/12 Python
Django配置MySQL数据库的完整步骤
2019/09/07 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
美国网上鞋城:Shoeline.com
2016/11/17 全球购物
楼面部长岗位职责范本
2014/02/14 职场文书
第二课堂活动总结
2014/05/07 职场文书
公司授权委托书
2014/10/17 职场文书
学校社团活动总结
2015/05/07 职场文书
2019年大学生职业生涯规划书最新范文
2019/03/25 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP