Помогите пожалуйста разорбраться с методам elementFromPoint()?

Проблема заключается в том, что есть два дива, один меньше другой больше. Большой постоянно перемещается и я хочу знать, когда маленький будет находиться в области координатов большого. Использую вот такой код, но на выходе у меня везде null. Почему так происходит.

let boxBig = document.querySelector(".boxBig ");
let y = 50;
let x = 20;
setInterval(() => {
  boxBig.style.top = (parseInt(boxBig.style.top) || 0) + y + "px";
  let elem = document.elementFromPoint(y, x);
  let res = elem.closest(".boxSmall");
  console.log(res);
}, 1000);
.boxBig {
  width: 100px;
  height: 100px;
  top: 50px;
  padding: 2px;
  border: 5px solid black;
  position: absolute;
}

.boxSmall {
  border: 5px solid rgb(231, 26, 91);
  position: fixed;
  width: 40px;
  height: 40px;
  top: 400px;
  left: 30px;
}
<div class="boxBig"></div>
<div class="boxSmall "></div>


Ответы (1 шт):

Автор решения: Grundy

Проблема в неверном указании координат:

  1. перепутаны местами x и y
  2. проверяется одна и та же точка, находящаяся вне маленького квадрата, поэтому результат всегда null.

Для решения достаточно менять проверяемую точку вместе с координатами большого квадрата, а так же подобрать такие координаты, чтобы точка при движении все-таки могла попасть внутрь маленького квадрата

let boxBig = document.querySelector(".boxBig ");
let current = document.getElementById("current");
let y = 50;
let x = 40;

current.style.top = `${y - 1 + 15}px`;
current.style.left = `${x - 1 + 5}px`;


let timer = setInterval(() => {
  let currentY = (parseInt(boxBig.style.top) || 0) + y;
  current.style.top = `${currentY - 1 + 15}px`;
  current.style.left = `${x - 1 + 5}px`;

  boxBig.style.top = currentY + "px";
  let elem = document.elementFromPoint(x + 5, currentY + 15);
  let res = elem;
  console.log(res);
  if (res != boxBig) clearInterval(timer);
}, 1000);
.boxBig {
  width: 100px;
  height: 100px;
  top: 0;
  padding: 2px;
  border: 5px solid black;
  position: absolute;
}

.boxSmall {
  border: 5px solid rgb(231, 26, 91);
  position: fixed;
  width: 40px;
  height: 40px;
  top: 100px;
  left: 30px;
}

#current {
  position: absolute;
  width: 2px;
  height: 2px;
  background: red;
}
<div id="current"></div>
<div class="boxBig"></div>
<div class="boxSmall"></div>

→ Ссылка