原生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 相关文章推荐
jscript之List Excel Color Values
Jun 13 Javascript
图片img的src不变让浏览器重新加载实现方法
Mar 29 Javascript
js算法中的排序、数组去重详细概述
Oct 14 Javascript
JS连连看源码完美注释版(推荐)
Dec 09 Javascript
jquery实现保存已选用户
Jul 21 Javascript
js+jquery实现图片裁剪功能
Jan 02 Javascript
jQuery常见的选择器及用法介绍
Dec 20 Javascript
纯JS实现轮播图
Feb 22 Javascript
JS引用传递与值传递的区别与用法分析
Jun 01 Javascript
vue 解决computed修改data数据的问题
Nov 06 Javascript
Vue请求java服务端并返回数据代码实例
Nov 28 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
Aug 28 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 include加载文件两种方式效率比较
2010/08/08 PHP
spl_autoload_register与autoload的区别详解
2013/06/03 PHP
解析php函数method_exists()与is_callable()的区别
2013/06/21 PHP
php数组使用规则分析
2015/02/27 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
Javascript 去除数组的重复元素
2010/05/04 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
JS中的==运算: [''] == false —&gt;true
2016/07/24 Javascript
javascript表达式和运算符详解
2017/02/07 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
2017/04/07 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
js实现Element中input组件的部分功能并封装成组件(实例代码)
2021/03/02 Javascript
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
python MySQLdb使用教程详解
2018/03/20 Python
Python协程 yield与协程greenlet简单用法示例
2019/11/22 Python
python随机生成库faker库api实例详解
2019/11/28 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
详解selenium + chromedriver 被反爬的解决方法
2020/10/28 Python
Python 微信公众号文章爬取的示例代码
2020/11/30 Python
Burberry英国官网:英国标志性奢侈品牌
2017/03/29 全球购物
会计与审计毕业生自荐信范文
2013/12/30 职场文书
我心目中的好老师活动方案
2014/08/19 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
售票员岗位职责
2015/02/15 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers
如何基于python实现单目三维重建详解
2022/06/25 Python