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 二维数组
Nov 26 Javascript
Array的push与unshift方法性能比较分析
Mar 05 Javascript
js中判断Object、Array、Function等引用类型对象是否相等
Aug 29 Javascript
node.js中的favicon.ico请求问题处理
Dec 15 Javascript
JavaScript操作Oracle数据库示例
Mar 06 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
Apr 10 Javascript
javascript 中关于array的常用方法详解
May 05 Javascript
详解Vuex中mapState的具体用法
Sep 28 Javascript
vue axios登录请求拦截器
Apr 02 Javascript
vscode 插件开发 + vue的操作方法
Jun 05 Javascript
vue如何搭建多页面多系统应用
Jun 17 Javascript
Antd中单个DatePicker限定时间输入范围操作
Oct 29 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+Ajax处理xml与json格式数据的方法示例
2019/03/04 PHP
javascript 学习之旅 (2)
2009/02/05 Javascript
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
UserData用法总结 lanyu出品
2010/07/01 Javascript
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
JS实现闪动的title消息提醒效果
2014/06/20 Javascript
浅析JS中对函数function的理解(基础篇)
2016/10/14 Javascript
js面向对象编程总结
2017/02/16 Javascript
jQuery实现的背景颜色渐变动画效果示例
2017/03/24 jQuery
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
原生JavaScript实现五子棋游戏
2020/11/09 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
[11:12]2018DOTA2国际邀请赛寻真——绿色长城OpTic
2018/08/10 DOTA
Python实现PS图像抽象画风效果的方法
2018/01/23 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
Flask 上传自定义头像的实例详解
2020/01/09 Python
pycharm无法导入本地模块的解决方式
2020/02/12 Python
Python3连接Mysql8.0遇到的问题及处理步骤
2020/02/17 Python
Python对wav文件的重采样实例
2020/02/25 Python
python实现PolynomialFeatures多项式的方法
2021/01/06 Python
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
团日活动策划书
2014/02/01 职场文书
2014年高考决心书
2014/03/11 职场文书
三问三解心得体会
2014/09/05 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
pandas 实现将NaN转换为None
2021/05/14 Python