드래그 중 시각적 피드백
드래그 작업 중 요소의 스타일을 지정합니다.
드래그 중 시각적 피드백은(는) CoddyKit의 무료 JavaScript Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 JavaScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. JavaScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
시각적 피드백이 중요한 이유
좋은 드래그 앤 드롭은 어떤 항목이 이동하는지, 어디에 놓을 수 있는지, 드롭이 유효한지를 사용자에게 알려 줍니다. 피드백이 없으면 상호작용이 고장 난 것처럼 느껴집니다.
드래그한 항목 스타일 지정하기
dragstart에서 소스의 밝기를 낮추거나 크기를 조절하면 사용자가 어떤 항목을 집었는지 알 수 있습니다.
item.addEventListener("dragstart", () => item.classList.add("is-dragging"));
item.addEventListener("dragend", () => item.classList.remove("is-dragging"));dragenter 이벤트
드래그한 항목이 잠재적인 대상에 들어가면 dragenter가 발생합니다. 이를 사용해 영역을 강조 표시할 수 있습니다.
zone.addEventListener("dragenter", (e) => {
e.preventDefault();
zone.classList.add("drag-over");
});dragleave 이벤트
항목이 대상에서 벗어나면 dragleave가 발생합니다. 여기서 강조 표시를 제거합니다.
zone.addEventListener("dragleave", () => {
zone.classList.remove("drag-over");
});깜박임 문제
자식 요소에 대해서도 dragenter/dragleave가 발생하므로 화면이 깜박일 수 있습니다. 카운터나 relatedTarget 검사를 사용하면 강조 표시를 안정적으로 유지할 수 있습니다.
let depth = 0;
zone.addEventListener("dragenter", () => { depth++; zone.classList.add("drag-over"); });
zone.addEventListener("dragleave", () => { depth--; if (depth === 0) zone.classList.remove("drag-over"); });드롭할 때 초기화하기
성공적으로 드롭했을 때는 dragleave가 발생하지 않을 수 있으므로, 항상 drop 처리기에서 강조 표시 상태를 지워야 합니다.
zone.addEventListener("drop", (e) => {
e.preventDefault();
depth = 0;
zone.classList.remove("drag-over");
});드래그 이미지 사용자 지정하기
dragstart에서 setDragImage(element, offsetX, offsetY)를 사용하면 기본 ghost를 원하는 요소로 바꿀 수 있습니다.
item.addEventListener("dragstart", (e) => {
const ghost = document.getElementById("custom-ghost");
e.dataTransfer.setDragImage(ghost, 20, 20);
});dropEffect로 커서 제어하기
복사 더하기 기호, 이동 화살표, 드롭 불가 표시와 같은 커서는 dragover에서 설정하는 dropEffect로 제어됩니다. 유효하지 않은 드롭은 "none"으로 거부하십시오.
zone.addEventListener("dragover", (e) => {
e.preventDefault();
e.dataTransfer.dropEffect = canAccept ? "move" : "none";
});드롭 자리 표시자 표시하기
정렬 가능한 목록에서는 예상 드롭 위치에 자리 표시자 요소를 삽입하여 항목이 정확히 어디에 놓일지 사용자에게 보여 줍니다.
function showPlaceholder(beforeEl) {
list.insertBefore(placeholder, beforeEl);
}삽입 위치 계산하기
포인터의 Y 좌표와 각 항목의 세로 중간점을 비교하여 항목 앞에 놓을지 뒤에 놓을지 결정합니다.
function getAfterElement(container, y) {
const items = [...container.querySelectorAll(".item:not(.is-dragging)")];
return items.find((el) => {
const box = el.getBoundingClientRect();
return y < box.top + box.height / 2;
});
}접근성을 위한 피드백
시각적 단서만 사용하면 키보드 사용자와 스크린 리더 사용자가 제외됩니다. 접근성을 위해 드래그 앤 드롭을 ARIA 실시간 알림 및 키보드 대체 방법과 함께 제공하십시오.
빠른 확인
시각적 피드백을 테스트해 보십시오.
복습: 시각적 피드백
드래그한 항목의 스타일을 지정하고, dragenter/dragleave로 영역을 강조 표시했으며, depth 카운터로 깜박임을 해결하고, 드래그 이미지를 사용자 지정하고, dropEffect로 커서를 제어하고, 드롭 자리 표시자를 표시했습니다. 다음 주제는 파일 드래그하기입니다.
자주 묻는 질문
“드래그 중 시각적 피드백” 강의는 무료인가요?
네 — “드래그 중 시각적 피드백” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 JavaScript Academy 강의 전체를 잠금 해제할 수 있습니다. JavaScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“드래그 중 시각적 피드백”에서 뭘 배우나요?
드래그 작업 중 요소의 스타일을 지정합니다. 브라우저에서 직접 실행하는 실습 코드로 JavaScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
JavaScript Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 JavaScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“드래그 중 시각적 피드백” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 JavaScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 JavaScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 요소를 드래그할 수 있게 만들기
- 놓기 대상과 dataTransfer
- 드래그 중 시각적 피드백
- 페이지로 파일 드래그하기