原生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性能示例
Feb 24 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
Aug 04 Javascript
jQuery实现仿百度帖吧头部固定导航效果
Aug 07 Javascript
JavaScript统计网站访问次数的实现代码
Nov 18 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
Mar 05 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
May 19 Javascript
Javascript基础_简单比较undefined和null 值
Jun 14 Javascript
JS中使用mailto实现将用户在网页中输入的内容传递到本地邮件客户端
Oct 08 Javascript
javascript实现下雨效果
Mar 27 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
Jul 27 Javascript
JavaScript实现简易聊天对话框(加滚动条)
Feb 10 Javascript
四十九个javascript小知识实用技巧
Nov 20 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
Windows中安装Apache2和PHP4权威指南
2006/11/18 PHP
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
9个实用的PHP代码片段分享
2015/01/22 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
2017/07/27 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
js函数内变量的作用域分析
2015/01/12 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
javascript-解决mongoose数据查询的异步操作
2016/12/22 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
Kindeditor单独调用多图上传实例
2017/07/31 Javascript
vue刷新和tab切换实例
2018/02/11 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
Node.js控制台彩色输出的方法与原理实例详解
2019/12/01 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
python制作最美应用的爬虫
2015/10/28 Python
Python 新建文件夹与复制文件夹内所有内容的方法
2018/10/27 Python
python实现LRU热点缓存及原理
2019/10/29 Python
Python小白不正确的使用类变量实例
2020/05/29 Python
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
应届生个人求职信模板
2013/11/26 职场文书
工厂采购员岗位职责
2014/04/08 职场文书
爱之链教学反思
2014/04/30 职场文书
公司演讲稿开场白
2014/08/25 职场文书
解决golang 关于全局变量的坑
2021/05/06 Golang
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫