博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript动画系列第三篇——碰撞检测
阅读量:6604 次
发布时间:2019-06-24

本文共 1188 字,大约阅读时间需要 3 分钟。

前面的话

  前面分别介绍了和,当可视区域内存在多个可拖拽元素,就出现碰撞检测的问题,这也是javascript动画的一个经典问题。本篇将详细介绍碰撞检测

 

原理介绍

  碰撞检测的方法有很多,接下来使用九宫格分析法

  假设黄色元素要与红色元素进行碰撞。将红色元素所处的区域分为9部分,自身处于第9部分,周围还存在8个部分。只要黄色元素进入红色元素的第9部分,就算碰撞。否则,都算未碰撞

  总共分为以下5种情况:

  1、处于上侧未碰撞区域——1、2、3区域

  2、处于右侧未碰撞区域——3、4、5区域

  3、处于下侧未碰撞区域——5、6、7区域

  4、处于左侧未碰撞区域——1、7、8区域

  5、处于碰撞区域——9区域

 

代码实现

  我们把上面的原理用代码实现

function bump(obj,objOther,bgColor){    /***被碰元素***/    //被碰元素左侧距离可视区域左侧的距离    var L0 = obj.offsetLeft;    //被碰元素上侧距离可视区域上侧的距离    var T0 = obj.offsetTop;    //被碰元素右侧距离可视区域右侧的距离    var R0 = obj.offsetLeft + obj.offsetWidth;    //被碰元素下侧距离可视区域下侧的距离    var B0 = obj.offsetTop + obj.offsetHeight;    /**侵入元素**/    var L = objOther.offsetLeft;    var T = objOther.offsetTop;    var R = objOther.offsetLeft + objOther.offsetWidth;    var B = objOther.offsetTop + objOther.offsetHeight;        /*******碰撞检测*******/    //上侧区域if(B < T0)    //左侧区域if(R < L0)    //右侧区域if(L > R0)    //下侧区域if(T > B0)        //碰撞区域    if(B >= T0 && R >= L0 && L <= R0 && T <= B0){        obj.style.backgroundColor = 'red';    }else{        obj.style.backgroundColor = bgColor;    }}

 

完整效果

元素一
元素二

 

转载于:https://www.cnblogs.com/xiaohuochai/p/5899228.html

你可能感兴趣的文章
浅谈尾递归的优化方式
查看>>
eclipse 的小技巧
查看>>
频率域滤波
查看>>
图片存储类型的种类、特点、区别
查看>>
GETTING UP AND RUNNING WITH NODE.JS, EXPRESS, JADE, AND MONGODB
查看>>
求二叉树第K层节点的个数
查看>>
关于cocos2d-x面试的问题
查看>>
MySQLs数据库建外键时自动跑到缩影处,真奇怪
查看>>
static关键字
查看>>
js 合并多个对象 Object.assign
查看>>
Java 反射机制
查看>>
Unity 碰撞检测中碰撞器与触发器的区别
查看>>
Elasticsearch配置文件说明
查看>>
路由表的构成
查看>>
初识java
查看>>
temporary Object and destructor
查看>>
xcode - 移动手势
查看>>
细说浏览器特性检测(1)-jQuery1.4添加部分
查看>>
古中国数学家的计算力真是惊人
查看>>
Java基础-算术运算符(Arithmetic Operators)
查看>>