在 Vue3 中,可以使用getBoundingClientRect()方法来获取元素的位置和大小信息。然后,通过比较两个元素的位置信息,可以判断它们是否发生了碰撞。

首先,给需要检测碰撞的两个div元素分别添加一个ref属性。

<div ref='div1'></div>
<div ref='div2'></div>

然后,在 Vue 组件的mounted或者updated生命周期钩子函数中,获取这两个div元素的位置信息,并进行碰撞检测。

mounted() {
  this.checkCollision();
},

updated() {
  this.checkCollision();
},

methods: {
  checkCollision() {
    const div1Rect = this.$refs.div1.getBoundingClientRect();
    const div2Rect = this.$refs.div2.getBoundingClientRect();

    // 检测碰撞
    if (
      div1Rect.right >= div2Rect.left &&
      div1Rect.left <= div2Rect.right &&
      div1Rect.bottom >= div2Rect.top &&
      div1Rect.top <= div2Rect.bottom
    ) {
      console.log('发生碰撞');
    } else {
      console.log('未发生碰撞');
    }
  }
}

checkCollision方法中,通过比较两个div元素的leftrighttopbottom属性,来判断它们是否有重叠部分。如果有重叠部分,则说明发生了碰撞。

需要注意的是,getBoundingClientRect()方法返回的位置信息是相对于viewport的,如果需要相对于其他元素进行比较,可以通过减去参考元素的位置信息来计算相对位置。


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

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