js碰撞检测

js中碰撞检测算法核心 一、矩形与矩形间的碰撞 核心理念 判断任意两个(无旋转)矩形的任意一边是否无间距,从而判断是否碰撞。大体实现方式就是以一个矩形的某个定点作为运动物,计算自己的坐上顶点与另一元素的左上定点的位置和宽高数据进行判断检测 图示理解 说明:图中的 x 是 offsetLeft , y 是 offsetTop,矩形的宽和高分别是 offsetWidth 、offsetHeight 3. 算法判断 if... 阅读详情

碰撞检测

碰撞检测(边界检测)在前端游戏,以及涉及拖拽交互的场景应用十分广泛。
碰撞,顾名思义,就是两个物体碰撞在了一起,眼睛是可以直观的观察到碰撞的发生。但对于前端实现,如何让 JavaScript 代码理解两个独立的“物体”(DOM)碰撞在一起呢。这就涉及到碰撞检测(或者叫边界检测)的问题了。

两个矩形块的碰撞:

判断任意两个(水平)矩形的任意一边是否有间距,从而得之两个矩形块有没有发生碰撞。具体实现方式,可以选定一个矩形为参照物,计算另一矩形的与自己相近的边是否发生重合现象。若四边均未发生重合,则未发生碰撞,反之则发生碰撞。

图形示例:
在这里插入图片描述
简单算法实现(非碰撞情况,else 分支就是碰撞情况):

    if( domA.left > domB.right 
        || domA.top > domB.bottom
        || domA.right < domB.left
        || domA.bottom < domB.top )
    {
        return false // 未碰撞
    } else {
        return true // 碰撞
    }
     

圆形与圆形的碰撞:

判断任意两个圆形碰撞比较简单,只需要判断两个圆的圆心距离是否小于两圆半径之和,如果小于半径和,就可以判定两个圆发生碰撞。

图形示例:
在这里插入图片描述
简单算法实现

   	var distance = Math.sqrt(Math.pow(x1 - x2) + Math.pow(y1 - y2) )
    if (distance < r1 + r2) { // r1、r2 分别为两圆的半径
        return true // 发生碰撞
    } else {
        return false //未发生碰撞
    }

案例:碰撞换位

在这里插入图片描述

碰撞检测方案

        1. 何时不会发生碰撞
          1. box1.right < box2.left
          2. box1.bottom < box2.top
          3. box1.left > box.right
          4. box1.top > box2.bottom
          这四种情况只要满足一种 盒子就不可能发生碰撞(相交)
          反过来说 只要不满足这四种情况 盒子就是发生碰撞(相交)
        2. target 当前元素和多个元素进行循环碰撞检测
          如果target是也其他待检测元素的兄弟 那检测时要先排除掉 target自身
          和某一个元素发生碰撞时 isCollision(this.targetEle, aChild[i])
        3. 初始化让每个child都变成绝对定位 并且自动设置好对应的 top left
          DOM异步问题 js 操作DOM API 通过DOM API 提供的属性和方法来对页面上的实际标签进行增删改查处理 修改样式 修改元素的style属性的值 
          异步过程
          js => DOM
          js 循环中发出指令 让DOM根据我们js代码的操作指示 去页面上修改对应的标签渲染
          循环是非常快的 js不停的快速的发出指令 但是 DOM修改页面是需要时间的 什么时候修改完成 需要看你的内存执行速度
          异步 任务交给别人来做 自己不管
          DOM工厂处理事务的时候 修改left 修改top 修改position是并行处理
          复杂度越低的越容易优先处理完成
          修改left 和 top都需要先通过获取offet系列属性 
          修改position直接有现成的字符串 
          修改position先完成 然后完成了修改left和top
          导致效果和js代码对不上
          解决方案 
            1. 把可能会冲突的DOM操作 分不同循环来处理
            2. 让任务滞后处理的方式 setTimeout 任务队列异步插入的能力 
            定时器任务是讲子任务插入到主线程队列最后 等主线程任务都完成之后会执行子线程任务
              不让修改style的代码在循环的时候直接去做 而是缓一缓
              不要再赋值的时候去获取
          4. 密集型元素矩阵中 碰撞可能发生在多个元素上 和多个元素同时发生碰撞的时候 如何处理
             需求 只要一个发生碰撞的 距离target最近的这个
             如何辨别多个碰撞元素中距离最近的那一个
             判断其他被碰撞元素中 谁的左上角距离target的左上角直线距离最短
             直线距离怎么求 勾股定理 勾三股四玄五
             a=40 b=30 求c长  a,b < 90°
             c = Math.sqrt(a*a + b*b)
          5. 元素位置的交换
            1. 目标元素和碰撞元素互换位置
                把两个元素 本身排列顺序中所对应下标的 left 和 top 进行置换
            2.  变量互换
                temp = A
                A = B
                B = temp
            3. 取得两个元素的下标 target coll 
            4. 根据下标去tempArr 获取对应的 top left
              修改两个元素的 top 和left css
            5. 让tempArr中对应两个位置的值进行对换 为下一次互换重置
          6. 目标元素插入新位置 所有元素自动重新排列
            1. 序列置换  0 <=> 2  
            [0,1,2,3,4,5,6,7,8] = >  [1,2,0,3,4,5,6,7,8]
            2. 修改dom元素的顺序排列 
              1. 如何修改DOM元素的顺序 
                 不需要修改实际DOM树(运算压力太大) 
                 我们只需要提供一个虚拟DOM数组(替身)
            3. 根据修改后的虚拟DOM 数组顺序 去对应 tempArr中存储的位置 做样式修改
            4. 高频触发碰撞监测 => vDom数组 频繁操作 => translate频繁修改元素的位置 
                限制一下 => 加一把锁 交换完成之后 打开锁 交换过程中 关闭锁
                发生碰撞监测需要进行交换之前我们需要判断一下锁的状态 如果锁是打开的就可以进行后续...
          7. 如果targetEle 在某一个中间位置停留 被碰撞的coll不管移动到哪里都会发生碰撞
            解决:
            1.只有重叠面积大于1/2 或者 2/3才发生交互
              缺点: 布局间距小的话 重叠面积比例不好把握 而且 计算复杂
            2.加锁 刚碰撞过一次的元素 加锁 如果连续碰撞 锁生效 不触发置换 循环锁 
              缺点: 用户体验不好 相当于给用户行为加锁]
            3.解决不了问题 我们就解决提出问题的人
              换一种碰撞检测方式 
              介入检测 
              鼠标在元素之内 
              dom.left < pointer.x && dom.right > pointer.x && dom.top < pointer.y && dom.bottom > pointer.y

代码实现

<!--
 * @Author: your name
 * @Date: 2020-08-13 20:33:37
 * @LastEditTime: 2023-03-14 16:54:46
 * @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
 * @Description: In User Settings Edit
 * @FilePath: \案例\case00.html
-->
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>碰撞监测</title>
  <style>
    * {
      user-select: none;
      margin: 0;
      padding: 0;
    }

    img {
      display: block;
      pointer-events: none;
    }

    html,
    body {
      height: 100%;

    }

    body {
      display: flex;
      justify-content: center;
      align-items: center;
    }

    .wrap {
      display: flex;
      flex-wrap: wrap;
      justify-content: space-between;
      align-content: space-around;
      position: relative;
      width: 940px;
      height: 468px;
      padding: 10px;
      box-shadow: 0 0 8px #222;
      border-radius: 6px;
    }

    .wrap .child {
      overflow: hidden;
      box-shadow: 0 0 2px #ccc;
      border-radius: 3px;
      transition: .4s linear;
    }

    .wrap .child.active {
      z-index: 999;
      box-shadow: 0 0 8px #222;
      transition: none;
    }

    .wrap .child.collision {
      transform: scale(1.05);
    }
  </style>
</head>

<body>
  <div class="wrap">
    <span class="child"><img src="images/re1.jpg" alt="" width="290" height="137"></span>
    <span class="child"><img src="images/re2.jpg" alt="" width="290" height="137"></span>
    <span class="child"><img src="images/re3.jpg" alt="" width="290" height="137"></span>
    <span class="child"><img src="images/re4.jpg" alt="" width="290" height="137"></span>
    <span class="child"><img src="images/re5.jpg" alt="" width="290" height="137"></span>
    <span class="child"><img src="images/re6.jpg" alt="" width="290" height="137"></span>
    <span class="child"><img src="images/re7.jpg" alt="" width="290" height="137"></span>
    <span class="child"><img src="images/re8.jpg" alt="" width="290" height="137"></span>
    <span class="child"><img src="images/re9.jpg" alt="" width="290" height="137"></span>
  </div>
  <script src="js/common.js"></script>
  <script>
    var oWrap = $('.wrap');
    var aChild = oWrap.children;
    var childLen = aChild.length;
    var tempArr = [];

    function initPos() {
      for (var i = 0; i < childLen; i++) {
        (function (idx) {
          tempArr.push([aChild[idx].offsetLeft, aChild[idx].offsetTop]);
          setTimeout(function () {
            aChild[idx].style.position = 'absolute'; 
            aChild[idx].style.left = tempArr[idx][0] + 'px';
            aChild[idx].style.top = tempArr[idx][1] + 'px';
          }, 0);
        })(i);
      }
      eventTypeMap.vDomArr = getNodeListArr(aChild);
    }

    var eventTypeMap = {
      isDown: false,
      isMove: false,
      targetEle: null,
      collisionEle: null,
      vDomArr: [],
      startPos: {
        x: 0,
        y: 0,
        left: 0,
        top: 0
      },
      'mousedown': function (e) {
        if (e.target.tagName.toLowerCase() === 'span') {
          this.isDown = true;
          this.startPos.x = e.clientX;
          this.startPos.y = e.clientY;
          this.startPos.left = e.target.offsetLeft;
          this.startPos.top = e.target.offsetTop;
          this.targetEle = e.target;
          this.targetEle.classList.add('active');
        }
      },
      'mousemove': function (e) {
        if (!this.isDown) {
          return false;
        }
        var collisionArr = [];
        var _x = e.clientX - this.startPos.x;
        var _y = e.clientY - this.startPos.y;
        this.targetEle.style.left = this.startPos.left + _x + 'px';
        this.targetEle.style.top = this.startPos.top + _y + 'px';
        this.targetEle.pointer = {
          x: e.clientX,
          y: e.clientY
        };
        for (var i = 0; i < childLen; i++) {
          aChild[i].classList.remove('collision');
          if (aChild[i] !== this.targetEle &&
            isInvolved(this.targetEle.pointer, aChild[i])) {
            collisionArr.push(aChild[i]);
          }
        }
        if (collisionArr.length > 0) {
          this.collisionEle = getShortDistance(collisionArr, this.targetEle);
          this.collisionEle.classList.add('collision');
          if (this.collisionEle && !this.isMove) {
            this.isMove = true;
            var targetIdx = this.vDomArr.indexOf(this.targetEle);
            var collIdx = this.vDomArr.indexOf(this.collisionEle);
            this.vDomArr.splice(targetIdx, 1);
            this.vDomArr.splice(collIdx, 0, this.targetEle);
            translate(this.vDomArr, this.targetEle);
          }
        }
      },
      'mouseup': function (e) {
        if (!this.isDown) {
          return false;
        }
        this.isDown = false;
        if (this.collisionEle && this.targetEle) {
          translate(this.vDomArr, null);
          this.collisionEle.classList.remove('collision');
          this.targetEle.classList.remove('active');
          this.targetEle = null;
          this.collisionEle = null;
        }
      }
    }

    initPos();
    oWrap.addEventListener('mousedown', drag, false);
    document.addEventListener('mousemove', drag, false);
    document.addEventListener('mouseup', drag, false);

    function drag(e) {
      if (eventTypeMap[e.type] &&
        typeof eventTypeMap[e.type] === 'function') {
        eventTypeMap[e.type](e);
      }
    }

    function translate(vDom, target) {
      tempArr.forEach(function (item, idx, arr) {
        if (vDom[idx] !== target) {
          vDom[idx].style.top = item[1] + 'px';
          vDom[idx].style.left = item[0] + 'px';
        }
      });
      setTimeout(function () {
        eventTypeMap.isMove = false;
      }, 500);
    }

    //介入检测 鼠标是否在元素范围内
    function isInvolved(pointer, collision) {
      var L = getPosition(collision).left;
      var R = L + collision.offsetWidth;
      var T = getPosition(collision).top;
      var B = T + collision.offsetHeight;
      if (L < pointer.x &&
        R > pointer.x &&
        T < pointer.y &&
        B > pointer.y) {
        return true;
      }
      return false;
    }


    //碰撞检测函数
    function isCollision(ele1, ele2) {
      var L1 = ele1.offsetLeft;
      var R1 = L1 + ele1.offsetWidth;
      var T1 = ele1.offsetTop;
      var B1 = T1 + ele1.offsetHeight;

      var L2 = ele2.offsetLeft;
      var R2 = L2 + ele2.offsetWidth;
      var T2 = ele2.offsetTop;
      var B2 = T2 + ele2.offsetHeight;

      if (R1 < L2 || B1 < T2 || L1 > R2 || T1 > B2) {
        return false;
      } else {
        return true;
      }
    }


    //求与target左上角距离最短的元素
    function getShortDistance(arr, ele) {
      var resultArr = [];
      arr.forEach(function (item) {
        var a = item.offsetLeft - ele.offsetLeft;
        var b = item.offsetTop - ele.offsetTop;
        var c = Math.sqrt(a * a + b * b);
        resultArr.push({
          element: item,
          distance: c
        });
      });
      return resultArr.reduce(function (acc, curr, idx, arr) {
        if (acc.distance > curr.distance) {
          acc = curr;
        }
        return acc;
      }).element;
    }

    function getNodeListArr(nodeList) {
      var newArr = [];
      for (var i = 0; i < nodeList.length; i++) {
        newArr[i] = nodeList[i];
      }
      return newArr;
    }
  </script>

</body>

</html>
多边形碰撞检测(判断点在多边形内) 点与规则的矩形或者等边、等腰三角形等的碰撞检测很简单,本文主要是介绍“点与多边不规则图形的碰撞检测”。 如图,这个多边形已经相当复杂,包含凸和凹,该如何解决呢? 结论:使用交点数判断。即从碰撞点发射出一条水平射线,计算这条射线和多边形的交点数,如果是奇数说明点在多边形内部,反之则在外部。 代码如下: /** * JS 代码 * 判断点是否在多边形内 * 求解通过该点的水平线与多边形... 阅读详情

相关推荐

JavaScript实现碰撞检测(分离轴定理)

分离轴定理是一项用于检测碰撞的算法。其适用范围较广,涵盖检测圆与多边形,多边形与多边形的碰撞;缺点在于无法检测凹多边形的碰撞。本demo使用Js进行算法实现,HTML5 canvas进行渲染。

findhappy117的博客 2948

JS函数实现碰撞检测

物体碰撞检测

juse__we的博客 1989

海外跨境电商商城源码-进出口电商平台网站-多语言多商户平台

我们的海外跨境电商系统源码还包括各种功能模块,如用户管理、商品管理、订单管理等。支付管理:与主流支付平台(如Stripe、PayPal等)的集成,支持多种支付方式;订单管理:创建订单、支付订单、取消订单等操作,以及订单状态查询和历史记录;购物车管理:添加商品到购物车、查看购物车、修改购物车中的商品数量等操作;商品管理:商品信息录入、编辑、删除等操作,以及商品分类和搜索功能。客服管理:在线咨询、投诉处理等功能,提供更好的用户服务。用户管理:注册、登录、忘记密码、个人资料。# 检查电子邮件地址是否有效。

柏诣科技的博客 2657

js之碰撞检测

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> *{ margin: 0; padding: 0; /*通过css方式 关闭标签的用户选中效果!!!*/ /*-webkit-user-select: none; -moz-use

个人笔记 2445

基于线性光耦HCNR200的高压直流采样电路设计与精度优化

本文详细介绍了基于线性光耦HCNR200的高压直流采样电路设计与精度优化方法。针对直流高电压测量中的安全与干扰问题,提出采用HCNR200光耦隔离方案,实现高精度线性传输。文章深入解析电路设计关键细节,包括电阻网络、运放选型、滤波电容配置等,并提供精度优化实战技巧与常见问题排查指南,助力新能源电动汽车和高压储能系统的高压直流采样应用。

weixin_42713608的博客 578

直升机空气动力学基础--005翼型的升阻比和气动力矩

焦点与翼型有关,总升力矩可以视为附加升力与零升力迎角升力的合成,对于对称翼型,零升力力矩为0,附加升力就是总升力,其焦点就是其压力中心。对于对称翼型,零升力力矩为0,对于非对称翼型,零升力力矩存在,与不对称度成正比。对于不对称翼型,升力对焦点的力矩保持不变。

ygf666的博客 4130

JavaScript 简单碰撞检测

引子 碰撞检测(Collision Detection)这个东西,之前找 canvas 相关资料的时候碰到过,有些好奇,就去尝试了解一下。 Origin My GitHub 简介 与碰撞检测有些类似的一个概念:命中检测(Hit-testing),也被广泛运用。 在计算机图形编程中,命中检测是确定用户控制的光标(或触摸屏上的触摸点)是否与屏幕上绘制的给定图形对象(如形状)产生相交的过程。根据这个...

XXHolic 1235

基于Ultralytic实现多路摄像头目标检测

基于Ultralytic实现多路摄像头目标检测前面的文章分享了单路摄像头画面的YOLO目标检测,这篇文章主要分享一下多路摄像头画面的实时YOLO目标检测。测试环境在Windows系统下进行。

qq_57674776的博客 939

JS-碰撞检测

一个简单的碰撞检测例子,检测div1是否和div2发生碰撞,当div1碰到div2时,改变div2的颜色,看测试图 看一下分析图: 当div1在div2的上边线(t2)以上的区域活动时,始终碰不上 当div1在div2的右边线(r2)以右的区域活动时,始终碰不上 当div1在div2的下边线(b2)以下的区域活动时,始终碰不上 当div1在div2的左边线(r2)以左

每天进步一点点 1万+

新手别怕!用嘉立创EDA从零画一块ESP8266最小系统板(附完整PCB源文件)

本文详细指导新手如何使用嘉立创EDA从零开始设计ESP8266最小系统板,涵盖原理图绘制、PCB布局、布线技巧及设计验证等关键步骤。通过实战案例和实用技巧,帮助读者快速掌握PCB设计基础,轻松打造自己的物联网开发板,并附完整PCB源文件供参考。

weixin_28716769的博客 618

华为OD机试 - 整型数组按照个位数排序(Java 双机位C卷 100分)

华为OD机试 双机位C卷题库疯狂收录中,刷题。

学Java,找哪吒 349

javascript碰撞检测的方法

javascript碰撞检测的方法 需要把要检测碰撞的精灵都放到数组里 然后循环遍历数组里的精灵检测碰撞查看原文:http://newmiracle.cn/?p=698

newmiracle学习天地 873

基于Python的FAO农业数据高效爬取与分析实战:从Scrapy到异步爬虫的进阶之路

本文将详细介绍如何使用Python最新技术爬取联合国粮农组织(FAO)的农业数据,涵盖从基础爬虫到高级异步爬虫的完整实现过程。文章包含5000余字的技术解析,提供完整的代码示例,并探讨数据处理与存储的最佳实践。

2201_76125261的博客 240

javascript拖拽碰撞检测

拖拽碰撞检测碰撞改变颜色 <style> .div1{width: 100px;height: 100px;background: pink;position: absolute;} .div2{ width: 150px;height: 150px;background: gray;position: absolute; ...

style201904的博客 418

【人脸识别】基于 Gabor+SVM和PCA+SVM实现人脸识别matlab源码含 GUI

1 简介 随着经济的快速发展,互联网的普及,信息安全逐渐被人们所重视。人脸识别技术作为保护信息安全的重要手段之一,也逐渐被研究学者所重视。人脸识别作为计算机视觉技术和生物特征识别技术的一个重要分支,模式识别与人工智能的一个重要领域,其主要任务是对静态图像或动态视频进行识别。如何快速的正确的对人脸进行识别是目前人脸识别课题的一个难题。人脸识别算法的选取直接关系到人脸识别的识别率。 本文首先介绍了国内外人脸识别的发展现状,并对人脸图像预处理方法进行了详细阐述。图像预处理的方法有很多,主要包括:灰度变换、图像锐

qq_59747472的博客 1136

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

javascript判断碰撞检测

javascript判断碰撞检测 点与矩形的碰撞检测 /** * * @param x1 点 * @param y1 点 * @param x2 矩形view x * @param y2 矩形view y * @param w 矩形view 宽 * @param h 矩形vi

newmiracle学习天地 717

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

JavaScript中碰撞检测的理解及说明

碰撞检测可用一张图来理解,如下图 中间盒子看作参照物 四条边分别为 l1 t1 r1 b1。 碰撞检测就是当某一个盒子四条边的任意一边与其他盒子的距离

weixin_58280614的博客 1015

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SAT.js 碰撞检测库:10个常见问题解决方案指南

SAT.js 是一个简单高效的 JavaScript 2D 碰撞检测库 🎯,专门为游戏开发者和前端工程师设计。无论你是开发网页游戏、交互式应用还是物理模拟,SAT.js 都能提供快速准确的碰撞检测解决方案。 ## 为什么选择 SAT.js 进行 2D 碰撞检测? SAT.js 库基于分离轴定理(Separating Axis Theorem)算法,能够精确检测各种几何形状之间的碰撞。相比其他

gitblog_00183的博客 750

javaScript:碰撞检测

碰撞检测在计算机图形、模拟、交互设计以及各种应用中都具有广泛的应用,它可以确保物体之间的正确交互,提供更真实和高效的体验,并有助于避免潜在的问题和冲突。

qq_52799985的博客 1820

小球拖拽和碰撞检测的简单实现(原生JS)

直接附代码: <!DOCTYPE html> <head> <style> #div1, #div2 { width: 100px; height: 100px; position: fixed; border-radius: 50px; } #div1 ...

Coder Ben's Writing 1019

JavaScript碰撞检测原理及其实现

1.模拟碰撞 简单模拟碰撞过程,用一个可以拖拽的div2去尝试碰撞一个固定的div1(均用绝对定位)2.碰撞检测原理 如图所示: 使得div分别有4个距离属性( L(left),T(top),R(right),B(bottom) ). 对于div1来说,画出一个九宫格,div2在除中心以为的8个格子任意移动都不会发送碰撞. 也就是说,只要满足条件:oDiv2.div2R小于oDiv1.d

SuperluminalSnails的专栏 1908

html的碰撞事件,js实现碰撞检测

这篇文章主要为大家详细介绍了js实现碰撞检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下本文实例为大家分享了js实现碰撞检测的具体代码,供大家参考,具体内容如下代码:Documentdiv {position: absolute;top: 0px;right: 0px;bottom: 0px;left: 0px;margin: auto;width: 300px;...

weixin_39951112的博客 906

JS之拖拽与碰撞检测

ev 为什么事件函数中有一个参数(ev)? 因为ev是事件的参数,在ev中包含了事件触发时的参数,比如click事件中的 ev.pageX,ev.pageY,keydown事件中的ev.keyCode等 在ie中.ev是全局的,可以通过windows.event来获取,在其它浏览器中,都是作为参数传入的,所有好多事件函数都这样写 myDiv.onclick = function(ev){ ...

沙漠皇帝本拉登 2525

原生js碰撞检测

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document&l

海绵宝宝 229

自己模拟游戏引擎,动手写个js碰撞检测插件

js-collider js碰撞检测插件入口... -&gt; github 项目地址 -&gt; 码云 通过继承ColliderPoint类并实现其中三个方法 /** * 这三个方法是用来让用户重写的 * onCollisionEnter: 监听第一次碰撞 * onCollisionStay: 一直监听碰撞 * onCollisionExit: 监...

weixin_33705053的博客 642
上一篇: js中offset、scroll、client、getBoundingClientRect、event坐标位置及视窗系列
下一篇: js实现移动蒙版层
喵_美
博客等级 码龄11年 445粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值