Rotate 구현 시 마우스 드래그에 따른 회전이 자연스럽지 않은 문제가 있었다.
처음 구현 시 마우스의 이전위치와 현재위치값의 변화량으로 element의 rotate값을 변경해줬다.
코드 자체는 문제가 없으나 ui상으로 마우스가 도형 위쪽에서 좌->우로 Drag할때와 도형 아래쪽에서 좌->우로 Drag할때 적용되는 angle값이 반대로 적용되야 자연스러운 움직임을 보여줄 수 있을 것이다. 상->하로 Drag되는 경우도 현재 마우스의 위치가 도형의 어디에 위치해 있느냐에 따라 다른 계산을 해줘야 우리가 원하는 동작을 볼 수 있다.
그래서 현재 element.getBoundingClientRect()을 사용하여 CenterX, CenterY를 구하고, 이를 이용해 도형기준 마우스의 현재 위치에 따라서 다른 동작을 하도록 구현했다.
const rect = selectionLayoutRef.current.getBoundingClientRect();
const centerX = rect.left + rect.width / 2;
const centerY = rect.top + rect.height / 2;
let dx = deltaX;
let dy = deltaY;
if (mouseY > centerY) dx *= -1;
if (mouseX < centerX) dy *= -1;
const angle = dx + dy;
element.rotate += angle;
잘 동작한다.
'👨💻 javascript' 카테고리의 다른 글
Chorme Extensions 업비트 (0) | 2024.02.26 |
---|---|
[React로 화이트보드] Canvas Color Picking + 선택된 요소 변형 동시에 적용하기 (0) | 2024.02.05 |
[React로 화이트보드] Picking Element Transform issue (0) | 2024.02.04 |
[React로 화이트보드] Draw Element Picking 구현 (2) | 2024.01.10 |
[React로 화이트보드] Canvas 동적생성 (0) | 2024.01.09 |