原生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 相关文章推荐
JS 对象介绍
Jan 20 Javascript
jquery获取radio值实例
Oct 16 Javascript
js倒计时简单实现代码
Aug 11 Javascript
Vue.js快速入门实例教程
Oct 15 Javascript
微信小程序 教程之模板
Oct 18 Javascript
Angular表单验证实例详解
Oct 20 Javascript
canvas仿iwatch时钟效果
Mar 06 Javascript
JavaScript 基础表单验证示例(纯Js实现)
Jul 20 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
Aug 25 Javascript
小程序scroll-view组件实现滚动的示例代码
Sep 20 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
Oct 10 jQuery
解决VueCil代理本地proxytable无效报错404的问题
Nov 07 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
Ajax PHP分页演示
2007/01/02 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
php实现邮件发送并带有附件
2014/01/24 PHP
ThinkPHP的I方法使用详解
2014/06/18 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
ThinkPHP V2.2说明文档没有说明的那些事实例小结
2015/07/01 PHP
thinkPHP查询方式小结
2016/01/09 PHP
php mysql获取表字段名称和字段信息的三种方法
2016/11/13 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
微信小程序tabbar不显示解决办法
2017/06/08 Javascript
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
[03:24]2014DOTA2国际邀请赛 神秘商店生意火爆
2014/07/18 DOTA
Python中使用语句导入模块或包的机制研究
2015/03/30 Python
python使用wmi模块获取windows下的系统信息 监控系统
2015/10/27 Python
python将字典内容存入mysql实例代码
2018/01/18 Python
Django自定义manage命令实例代码
2018/02/11 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
python SVD压缩图像的实现代码
2019/11/05 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
2021/01/27 Python
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
C#中的验证控件有几种
2014/03/08 面试题
博士毕业生自我鉴定范文
2014/04/13 职场文书
保护母亲河倡议书
2014/04/14 职场文书
先进员工获奖感言
2014/08/14 职场文书
分享几种python 变量合并方法
2022/03/20 Python