原生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 相关文章推荐
jQuery ctrl+Enter shift+Enter实现代码
Feb 07 Javascript
JS 事件绑定函数代码
Apr 28 Javascript
事件模型在各浏览器中存在差异
Oct 20 Javascript
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
Nov 16 Javascript
JS获取鼠标坐标位置实例分析
Jan 20 Javascript
jQuery实现的兼容性浮动层示例
Aug 02 Javascript
Json按某个键的值进行排序
Dec 22 Javascript
防止重复发送 Ajax 请求
Feb 15 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
Jun 13 Javascript
vue 指定组件缓存实例详解
Apr 01 Javascript
VUE前后端学习tab写法实例
Aug 06 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
Jul 26 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
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
PHP 加密与解密的斗争
2009/04/17 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
PHP使用Mysql事务实例解析
2014/09/08 PHP
php中分页及SqlHelper类用法实例
2017/01/12 PHP
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
js截取字符串的两种方法及区别详解
2013/11/05 Javascript
JS OffsetParent属性深入解析
2014/01/13 Javascript
巧用局部变量提升javascript性能
2014/02/24 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
javascript获取checkbox复选框获取选中的选项
2014/08/12 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
2016/03/04 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
python中的sort方法使用详解
2014/07/25 Python
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
Python中的asyncio代码详解
2019/06/10 Python
使用python脚本自动创建pip.ini配置文件代码实例
2019/09/20 Python
python 字典的打印实现
2019/09/26 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
2020/06/09 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
CSS超出文本指定宽度用省略号代替和文本不换行
2016/05/05 HTML / CSS
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
瑞典最好的运动鞋专卖店:Sneakersnstuff
2016/08/29 全球购物
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
C语言笔试题
2014/09/04 面试题
服务生自我鉴定
2014/01/22 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL