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 checkbox 全选/反选及批量删除
Apr 28 Javascript
用jquery实现输入框获取焦点消失文字
Apr 27 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
Sep 02 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
Nov 24 Javascript
前端JS面试中常见的算法问题总结
Dec 23 Javascript
JS实现json的序列化和反序列化功能示例
Jun 13 Javascript
Vue.js实现分页查询功能
Nov 15 Javascript
解决layui 复选框等内置控件不显示的问题
Aug 14 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
Jan 30 Javascript
JS开发自己的类库实例分析
Aug 28 Javascript
在vue中嵌入外部网站的实现
Nov 13 Javascript
javascript 数组(list)添加/删除的实现
Dec 17 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
长波知识介绍
2021/03/01 无线电
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
DOM 基本方法
2009/07/18 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
javascript中一些util方法汇总
2015/06/10 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
WebStorm ES6 语法支持设置&amp;babel使用及自动编译(详解)
2017/09/08 Javascript
vue中实现滚动加载更多的示例
2017/11/08 Javascript
vue-cli系列之vue-cli-service整体架构浅析
2019/01/14 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
2019/03/07 jQuery
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
Python星号*与**用法分析
2018/02/02 Python
学习python可以干什么
2019/02/26 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
python之array赋值技巧分享
2019/11/28 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
2020/03/30 Python
Python新手学习装饰器
2020/06/04 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
国际礼品店:GiftsnIdeas
2018/05/03 全球购物
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
服务宗旨标语
2014/07/01 职场文书
应聘教师求职信
2014/07/19 职场文书
公务员四风问题对照检查材料整改措施
2014/09/26 职场文书
退学证明范本3篇
2014/10/29 职场文书
导游词之镇江焦山
2019/11/21 职场文书
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android