js实现碰撞检测


Posted in Javascript onJanuary 29, 2021

本文实例为大家分享了js实现碰撞检测的具体代码,供大家参考,具体内容如下

js实现碰撞检测

js实现碰撞检测

代码:

<!DOCTYPE html>
<html lang="en">
 
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<style>
  div {
    position: absolute;
    top: 0px;
    right: 0px;
    bottom: 0px;
    left: 0px;
    margin: auto;
    width: 300px;
    height: 300px;
    background-color: green;
  }
  
  span {
    position: absolute;
    top: 0px;
    left: 0px;
    display: block;
    width: 100px;
    height: 100px;
    background-color: rgb(10, 151, 233);
  }
</style>
 
<body>
  <div></div>
  <span></span>
  <script>
    var div = document.getElementsByTagName('div')[0];
    var span = document.getElementsByTagName('span')[0];
    span.onmousedown = function(e) {
      // 事件对象兼容
      e = window.event || e;
      // 添加全局捕获
      if (span.setCapture) {
        span.setCapture();
      }
      // 鼠标按下获取鼠标距离页面左侧和顶部距离
      var x = e.clientX;
      var y = e.clientY;
      // 元素距离页面左侧和顶部距离
      var elex = span.offsetLeft;
      var eley = span.offsetTop;
      // 鼠标距离元素距离 =鼠标距离页面距离 -元素距离页面距离
      var X = x - elex;
      var Y = y - eley;
      document.onmousemove = function(e) {
        // 鼠标移动 获取鼠标距离页面距离
        // 事件对象兼容
        e = window.event || e;
        var movex = e.clientX;
        var movey = e.clientY;
        // 元素的left和top值 =鼠标距离页面距离 -鼠标距离元素距离
        var leftx = movex - X;
        var lefty = movey - Y;
        /*----------------------------------------------------------*/
        // 碰撞检测
        // 1.左侧安全距离 =大盒子距离页面左侧距离 -小盒子占位宽
        var safeleft = div.offsetLeft - span.offsetWidth;
        // 2.右侧安全距离 大盒子距离页面左侧距离 +大盒子占位宽
        var saferight = div.offsetLeft + div.offsetWidth;
        // 3.上侧安全距离 =大盒子距离页面顶部距离 -小盒子占位高
        var safetop = div.offsetTop - span.offsetHeight;
        // 4. 下侧安全距离 = 大盒子距离页面顶部距离 + 大盒子占位高
        var safebottom = div.offsetTop + div.offsetHeight;
 
        if (leftx < safeleft || leftx > saferight || lefty < safetop || lefty > safebottom) {
          div.style.background = 'green';
        } else {
          div.style.background = 'red';
        }
 
        /*----------------------------------------------------------*/
 
        // 边界值
        // 左
        if (leftx <= 0) {
          leftx = 0;
        }
        // 上
        if (lefty <= 0) {
          lefty = 0;
        }
        // 右
        var rightx = document.documentElement.clientWidth - span.offsetWidth;
        if (leftx >= rightx)
          leftx = rightx;
        // 下
        var righty = document.documentElement.clientHeight - span.offsetHeight;
        if (lefty >= righty) {
          lefty = righty;
        }
 
 
        span.style.left = leftx + 'px';
        span.style.top = lefty + 'px';
      }
      document.onmouseup = function() {
 
          document.onmousemove = null;
          if (span.releaseCapture) {
            span.releaseCapture();
          }
 
 
        }
        // 阻止默认事件
      return false;
    }
  </script>
</body>
 
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。 

Javascript 相关文章推荐
javaScript如何处理从java后台返回的list
Apr 24 Javascript
在myeclipse中如何加入jquery代码提示功能
Jun 03 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
Sep 10 Javascript
jQuery学习笔记之回调函数
Aug 15 Javascript
使用jquery给新生的th绑定hover事件的实例
Feb 10 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
Mar 02 Javascript
vue2.0 常用的 UI 库实例讲解
Dec 12 Javascript
webpack 打包压缩js和css的方法示例
Mar 20 Javascript
JS函数内部属性之arguments和this实例解析
Oct 07 Javascript
浅谈vue限制文本框输入数字的正确姿势
Sep 02 Javascript
vue中watch的用法汇总
Dec 28 Vue.js
详解ES6 中的Object.assign()的用法实例代码
Jan 11 Javascript
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
Jan 29 #jQuery
vue穿梭框实现上下移动
Jan 29 #Vue.js
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
Jan 28 #Javascript
vue使用transition组件动画效果的实例代码
Jan 28 #Vue.js
Bootstrap FileInput实现图片上传功能
Jan 28 #Javascript
js实现简单的倒计时
Jan 28 #Javascript
原生js实现无缝轮播图效果
Jan 28 #Javascript
You might like
phpMyAdmin 安装教程全攻略
2007/03/19 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
JavaScript判断textarea值是否为空并给出相应提示
2014/09/04 Javascript
Javascript中的call()方法介绍
2015/03/15 Javascript
JavaScript中继承用法实例分析
2015/05/16 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
JavaScript中的定时器之Item23的合理使用
2015/10/30 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
2016/05/20 Javascript
JavaScript中函数声明与函数表达式的区别详解
2016/08/18 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
JS实现字符串转驼峰格式的方法
2016/12/16 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
JavaScript中防止微信浏览器被整体拖动的方法
2017/08/25 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
跟老齐学Python之数据类型总结
2014/09/24 Python
Python操作Excel之xlsx文件
2017/03/24 Python
Python数据操作方法封装类实例
2017/06/23 Python
python八皇后问题的解决方法
2018/09/27 Python
简单了解django索引的相关知识
2019/07/17 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
观看《永远的雷锋》心得体会
2014/03/12 职场文书
三爱活动实施方案
2014/03/19 职场文书
2014年技术工作总结范文
2014/11/20 职场文书
导游词之山东孔庙
2019/11/04 职场文书
Python学习之迭代器详解
2022/04/01 Python