JavaScript 无法检测两个 Div 之间的碰撞轴

标签 javascript html math collision

正在检测 2 个 div 是否重叠,如果重叠,我将检查矩形 1 的右侧和矩形 2 的左侧、矩形 1 的顶部和矩形 2 的底部等之间的距离。

    if (rect1.right > rect2.left &&
        rect1.left < rect2.right &&
        rect1.top < rect2.bottom &&
        rect1.bottom > rect2.top) {

        //collision detected.

        var dtop = Math.abs(rect1.top - rect2.bottom);
        var dbot = Math.abs(rect1.bottom - rect2.top);
        var dright =Math.abs(rect1.right - rect2.left);
        var dleft = Math.abs(rect1.left - rect2.right);
        var closestSide = Math.min(dtop,dbot,dright,dleft);

        if (closestSide == dleft || dright) {
            collisionAxis = "x";
        } 

        if (closestSide == dtop || dbot) {
            collisionAxis = "y";
        } 

        alert("collisionAxis: " + collisionAxis);

        return collisionAxis;

    }

出于某种原因,collisionAxis 始终被设置为“y”,即使当closestSide == dleft || 时也是如此。 dright,应将碰撞轴设置为“x”...

这是一个 JSFiddle 示例。当白色矩形与黑色矩形碰撞时,我的 DetectCollision 函数中的变量 collisionAxis 应设置为“x”,因为 closestSide = dright,但不知何故它被设置为“y”。

谁能告诉我为什么?

最佳答案

应该是

    if (closestSide == dleft || closestSide == dright) {
        collisionAxis = "x";
    } 

    if (closestSide == dtop || closestSide == dtopdbot) {
        collisionAxis = "y";
    } 

关于JavaScript 无法检测两个 Div 之间的碰撞轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27664740/

相关文章:

javascript - 保留后退按钮上的 HTML 表单输入启用状态

javascript - 使用CSS自动拉伸(stretch)元素以适应父容器

javascript - ruby on rails 中的 Ajax flash 消息

javascript - 在选择的多个元素上强制确定大小

math - 是否存在 {0^i1^j 使得 1 <= i <= j <=2i } 的上下文无关语法?

javascript - 现值函数

javascript - 如何从 Angular 中的 http/async 调用为接口(interface)属性赋值?

用于动态 HTML 页面的 PHP 与 JavaScript

Html/CSS 对齐标签的文本

c - 我真的不知道从哪里开始