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 相关文章推荐
js单独获取一个checkbox看其是否被选中
Sep 22 Javascript
js实现表单Radio切换效果的方法
Aug 17 Javascript
纯javascript实现分页(两种方法)
Aug 26 Javascript
如何动态加载外部Javascript文件
Dec 02 Javascript
高效的jquery数字滚动特效
Dec 17 Javascript
理解javascript中Map代替循环
Feb 26 Javascript
Node.js的特点详解
Feb 03 Javascript
微信小程序 后台登录(非微信账号)实例详解
Mar 31 Javascript
浅谈vue的几种绑定变量的值 防止其改变的方法
Mar 01 Javascript
JavaScript实现模态对话框实例
Jan 13 Javascript
js 计算月/周的第一天和最后一天代码
Feb 01 Javascript
javascript canvas实现简易时钟例子
Sep 05 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
php 无限级缓存的类的扩展
2009/03/16 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
JS 实现完美include载入实现代码
2010/08/05 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
html向js方法传递参数具体实现
2013/08/08 Javascript
Jquery中的层次选择器与find()的区别示例介绍
2014/02/20 Javascript
jQuery中get()方法用法实例
2014/12/27 Javascript
深入学习JavaScript中的Rest参数和参数默认值
2015/07/28 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
js实现表格数据搜索
2020/08/09 Javascript
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
Python中列表、字典、元组、集合数据结构整理
2014/11/20 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
Python分割指定页数的pdf文件方法
2018/10/26 Python
Python适配器模式代码实现解析
2019/08/02 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
python3的pip路径在哪
2020/06/23 Python
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
Linux的文件类型
2012/03/07 面试题
自动化专业毕业生自荐信
2013/11/01 职场文书
银行开业庆典方案
2014/02/06 职场文书
酒店管理专业自荐信
2014/05/23 职场文书
活动经费申请报告
2015/05/15 职场文书
2016年大学生实习单位评语
2015/12/01 职场文书
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技