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 相关文章推荐
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
Dec 27 Javascript
Javascript处理DOM元素事件实现代码
May 23 Javascript
JS 页面计时器示例代码
Oct 28 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
Dec 02 Javascript
Form表单上传文件(type=&quot;file&quot;)的使用
Aug 03 Javascript
Vue开发实现吸顶效果的示例代码
Aug 21 Javascript
element-ui中的select下拉列表设置默认值方法
Aug 24 Javascript
详解处理Vue单页面应用SEO的另一种思路
Nov 09 Javascript
教你使用vue-cli快速构建的小说阅读器
May 13 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
Sep 11 Javascript
ES6中的Javascript解构的实现
Oct 30 Javascript
vue3语法糖内的defineProps及defineEmits
Apr 14 Vue.js
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注入实例
2006/10/09 PHP
Smarty模板快速入门
2007/01/04 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
PHP的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
兼容FF和IE的动态table示例自写
2013/10/21 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
深入理解ECMAScript的几个关键语句
2016/06/01 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
更改Ubuntu默认python版本的两种方法python-&gt; Anaconda
2016/12/18 Python
Python中元组,列表,字典的区别
2017/05/21 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
Python logging模块用法示例
2018/08/28 Python
Django密码系统实现过程详解
2019/07/19 Python
python实现一个点绕另一个点旋转后的坐标
2019/12/04 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
python 模拟登录B站的示例代码
2020/12/15 Python
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
PHP面试题-$message和$$message的区别
2015/12/08 面试题
电脑售后服务承诺书
2014/03/27 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
感恩教育活动总结
2014/05/05 职场文书
工作会议方案
2014/05/21 职场文书
农民工预备党员思想汇报
2014/09/14 职场文书
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
火烧圆明园观后感
2015/06/03 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis
tomcat正常启动但网页却无法访问的几种解决方法
2022/05/06 Servers