내 구현은 다음과 같습니다. jsfiddle.net바닐라 JS 부서 충돌 감지
4 개의 div가 있습니다. 내 목표는 페이지 주위를 드래그 할 수있게하는 것이지만 서로 겹치지 않도록하는 것입니다. 각각은 mousemove 리스너를 사용하여 페이지 주위로 드래그 할 수 있습니다.
container.addEventListener('mousemove',mouseMove);
function mouseMove(e) {
if (!mouseDown) {return;}
let coords=e.target.getBoundingClientRect();
let movX=e.movementX;
let movY=e.movementY;
if (!collision(movX,movY,e.target.classList[1],coords)){
e.target.style.left=`${coords.left+movX}px`;
e.target.style.top=`${coords.top+movY}px`;
}
}
내 충돌 감지 기능은 엄밀히 말하면 작동합니다. div에 "Collision"이벤트를 출력하므로 주위를 드래그 할 때이를 볼 수 있습니다. 하지만 div를 서로 위에 드래그 할 수는 있습니다.
당신이 그것들을 떼어 낼려고 할 때 조금씩 달라 붙습니다. 충돌 감지는이 시점에서 매우 빠르게 진실/거짓 사이를 움직입니다. 그래서 나는 아마도 여기에 어떤 이상 함이 있을지 모른다고 추측합니다. 그러나 나는 그것을 알 수 없습니다.
국경이 같을 때 충돌 감지가 충돌 만 출력한다는 것이 하나의 문제라고 생각합니다. 즉, 충돌이 발생하고 한 요소가 다른 요소 안에 있으면 오류를 반환합니다.
그러나 mousemove e.movementX 및 e.movementY 이벤트가 충돌 테스트를 통과하고 div를 이동하는 방법을 알 수 없습니다.
당신의 예에서, 당신의 '항목은'광장입니다. 항상 그렇습니까? – allnodcoms
그들은 직사각형 일 수도 있습니다. – thmsdnnr
아래에 제시 한 대답은 모두 같은 크기 인 한 직사각형을 처리합니다. 그렇지 않다면 약간의 바이올린이 필요할 수도 있습니다 ... – allnodcoms