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 相关文章推荐
农历与西历对照
Sep 06 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
Jul 23 Javascript
JS检测图片大小的实例
Aug 21 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
Oct 17 Javascript
javascript中数组中求最大值示例代码
Dec 18 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
Jun 20 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
Jun 26 Javascript
javascript实现C语言经典程序题
Nov 29 Javascript
vue bus全局事件中心简单Demo详解
Feb 26 Javascript
Vue 幸运大转盘实现思路详解
May 06 Javascript
小程序Request的另类用法详解
Aug 09 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
May 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
做一个有下拉功能的留言版
2006/10/09 PHP
PHP 加密解密内部算法
2010/04/22 PHP
PHP GD 图像处理组件的常用函数总结
2010/04/28 PHP
PHP 日志缩略名的创建函数代码
2010/05/26 PHP
php中用foreach来操作数组的代码
2011/07/17 PHP
php _autoload自动加载类与机制分析
2012/02/10 PHP
Chrome Web App开发小结
2014/09/04 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
2014/11/19 PHP
php下Memcached入门实例解析
2015/01/05 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
javascript获取元素CSS样式代码示例
2013/11/28 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
Vue精简版风格概述
2018/01/30 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
微信小程序实现折线图的示例代码
2019/06/07 Javascript
vue前后分离调起微信支付
2019/07/29 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
如何在selenium中使用js实现定位
2020/08/18 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
[09:23]国际邀请赛采访专栏:iG战队VK,Tongfu战队Cu
2013/08/05 DOTA
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
使用python将时间转换为指定的格式方法
2018/11/12 Python
python实现整数的二进制循环移位
2019/03/08 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
小型女装店的创业计划书
2014/01/09 职场文书
护士岗位职责
2014/02/16 职场文书
招商引资工作汇报
2014/10/28 职场文书
会计电算化实训报告
2014/11/04 职场文书
民间借贷借条如何写
2015/05/26 职场文书
css3新特性的应用示例分析
2022/03/16 HTML / CSS