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操作ACCESS数据库(读增改删)的代码
May 14 Javascript
js switch case default 的用法示例介绍
Oct 23 Javascript
jquery实现勾选复选框触发事件给input赋值
Feb 01 Javascript
跟我学习javascript的arguments对象
Nov 16 Javascript
jQuery实现的简单分页示例
Jun 01 Javascript
深入理解JQuery循环绑定事件
Jun 02 Javascript
jQuery模拟窗口抖动效果
Mar 15 Javascript
Web开发使用Angular实现用户密码强度判别的方法
Sep 27 Javascript
小程序登录态管理的方法示例
Nov 13 Javascript
详解element-ui设置下拉选择切换必填和非必填
Jun 17 Javascript
vue子路由跳转实现tab选项卡
Jul 24 Javascript
Javascript中的this,bind和that使用实例
Dec 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 email邮箱正则
2008/10/08 PHP
PHP排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
JavaScript设置首页和收藏页面的小例子
2013/11/11 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
2016/09/23 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
Dropzone.js实现文件拖拽上传功能(附源码下载)
2016/11/22 Javascript
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
JavaScript设计模型Iterator实例解析
2020/01/22 Javascript
Python中的rfind()方法使用详解
2015/05/19 Python
利用python批量检查网站的可用性
2016/09/09 Python
基于python3 OpenCV3实现静态图片人脸识别
2018/05/25 Python
django orm 通过related_name反向查询的方法
2018/12/15 Python
css3实现一个div设置多张背景图片及background-image属性实例演示
2017/08/10 HTML / CSS
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
2014/04/08 HTML / CSS
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
自我鉴定注意事项
2014/01/19 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
安全生产演讲稿
2014/05/09 职场文书
岗位说明书标准范本
2014/07/30 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
作风建设年活动实施方案
2014/10/24 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
政协工作总结2015
2015/05/20 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript