바닐라 JS 로 했듯... 이번에도 드래그앤드롭 구현을.. 맡아버렸다
근데 좀더... ?? 띠용한거 같다... 왜냐하면 전에 드래그앤드롭은 그냥 아무 위치에 스티커를 붙여주는 느낌이라면
이번 프로젝트는 드롭 타겟에 촥!! 붙어야 하는데
이게 가능할지 잘 모르겠다 ...ㅠㅠ
일단은 서칭과 노가다의 힘으로 드래그앤 드롭은 되긴한다!
const onDragOver = e => {
e.preventDefault();
};
const onDragStart = e => {
e.dataTransfer.effectAllowed = 'move';
const originPosTemp = { ...originPos };
originPosTemp.x = e.target.offsetLeft; //칸반보드 컨텐츠 부분부터
originPosTemp.y = e.target.offsetTop;
setOriginPos(originPosTemp);
console.log(originPosTemp);
const clientPosTemp = { ...clientPos };
clientPosTemp.x = e.clientX; // 브라우저 왼쪽 상단부터
clientPosTemp.y = e.clientY;
setClientPos(clientPosTemp);
console.log('clientPosTemp', clientPosTemp);
};
const onDrag = e => {
const PosTemp = { ...pos };
console.log(pos.left, pos.top);
// 자신이 위치한 칸반섹션 부터
PosTemp.left = e.target.offsetLeft + e.clientX - clientPos.x;
PosTemp.top = e.target.offsetTop + e.clientY - clientPos.y;
setPos(PosTemp);
console.log(PosTemp);
const clientPosTemp = { ...clientPos };
clientPosTemp.x = e.clientX;
clientPosTemp.y = e.clientY;
setClientPos(clientPosTemp);
};
const onDragEnd = e => {
e.dataTransfer.dropEffect = 'move';
};
clientX /clientY 는 브라우저 자체의 위치값을,
offsetLeft 는 컴포넌트 position 값에 기준이 되는 곳에서부터의 위치값을 나타내주므로
두 값을 더해준 값에 바로 일전의 client 값을 state 로 저장한다음 빼주면 그 차이만큼 움직인 것이 된다.
그리고 드래그 하는 동안 계속 client 값을 계산 해줘야 한다..
dragOver 랑 dragEnd 는 일단 아직 쓸 곳이 없어서 보통 하라는 방식으로 처리했다.
dragEnd 부분에 새로운 함수를 만들어서 해당 컴포넌트로 위치값을 계산하고 그 영역에 들어가면 위치값을 변경하거나 원래 있던 위치로 이동하거나 처리를 해줘야 하는데~~ 일단은 오늘은 여기까지 하기로 햇다.. 그냥 내가...
'학원에서 배운 것 > React' 카테고리의 다른 글
React 로 카카오톡 공유하기 기능 추가해보기 (1) | 2023.05.15 |
---|---|
팀플을 하면서 시도했던 드래그앤드롭 코드들.. (0) | 2023.04.22 |
KDT 5th 웹개발자 입문 수업 ... 마지막 팀 프로젝트 시작! (0) | 2023.04.08 |
KDT 5th 웹개발자 입문 수업 44일차 (0) | 2023.04.06 |
KDT 5th 웹개발자 입문 수업 43일차 - 2 (0) | 2023.04.05 |