要检测两个 div 是否发生碰撞,并获取碰撞的方向,可以使用 `getBoundingClientRect()` 方法来获取每个 div 的位置信息,然后根据位置信息判断是否发生碰撞。

首先,给每个 div 添加一个 ref 来获取其 DOM 元素的引用。例如:

<template>
  <div>
    <div ref='div1' class='box'></div>
    <div ref='div2' class='box'></div>
  </div>
</template>

然后,在组件的 `mounted` 钩子函数中,可以使用 `getBoundingClientRect()` 方法来获取 div 的位置信息,并判断是否发生碰撞。例如:

<script>
import { ref, onMounted } from 'vue';

export default {
  setup() {
    const div1 = ref(null);
    const div2 = ref(null);

    onMounted(() => {
      const rect1 = div1.value.getBoundingClientRect();
      const rect2 = div2.value.getBoundingClientRect();

      const collision = isCollision(rect1, rect2);
      console.log('Collision:', collision);
    });

    function isCollision(rect1, rect2) {
      return (
        rect1.left < rect2.right &&
        rect1.right > rect2.left &&
        rect1.top < rect2.bottom &&
        rect1.bottom > rect2.top
      );
    }

    return {
      div1,
      div2
    };
  }
};
</script>

在 `isCollision` 函数中,通过比较两个 div 的左右和上下边界的位置关系,判断是否发生碰撞。如果发生碰撞,返回 `true`,否则返回 `false`。

可以根据具体的需求,修改 `isCollision` 函数来获取碰撞的方向。例如,可以通过比较两个 div 的中心点位置关系来判断碰撞的方向。具体实现方式可以根据实际情况进行调整。

在控制 div 移动时,可以根据碰撞的结果来判断是否允许移动。例如,如果发生碰撞,则禁止移动 div。


原文地址: https://www.cveoy.top/t/topic/pkSF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录