Drag 이벤트에서는 dataTransfer라는 특수한 객체를 사용할 수 있는데, 이를 통해서 드래그 되었을 때 값을 저장하고 해당 값을 전달할 수 있게 해준다.
이를 사용해서 drag & drop으로 랜덤 숫자를 생성하는 예제를 만들어 보았다.
<div>
<div class="drag-div" draggable=true>Drag And Get Random Number</div>
<div class="drop-div">
<span>Number :</span>
<span class="insertion"></span>
</div>
</div>
위의 Drag And Get Random Number를 드래그할 수 있게 설정한다.
그리고 드래그하여 하단의 Number에 드랍하면, 랜덤 숫자를 화면에 띄울 수 있게 한다.
.drag-div {
padding: 10px;
background-color: #ccc;
width: fit-content;
}
.drop-div {
margin-top: 50px;
padding: 10px;
background-color: #000;
color: #fff;
width: fit-content;
}
보기 좋게 CSS를 설정한다.
const dragDiv = document.querySelector(".drag-div");
const dropDiv = document.querySelector(".drop-div");
dragDiv.addEventListener("dragstart", (e) => {
const random = Math.floor(Math.random() * 100);
event.dataTransfer.setData('num', random);
})
dropDiv.addEventListener("dragover", (e) => {
e.preventDefault(); // 필수!
});
dropDiv.addEventListener("drop", (e) => {
e.preventDefault();
const spanInsertion = dropDiv.querySelector(".insertion");
spanInsertion.innerText = e.dataTransfer.getData("num");
});
그리고 자바스크립트 코드이다.
드래그가 시작될 때, 이벤트의 dataTransfer에 데이터를 key-value 형식으로 저장한다.
그리고 drop하였을 때 dataTransfer에서 데이터를 가져와 서로 다른 div간의 데이터 전달을 드래그를 통해 구현할 수 있다.
❄️ drop 과정에서 dragover 이벤트를 제거하지 않으면, drop 이벤트가 정상적으로 이루어지지 않는다.
https://developer.mozilla.org/ko/docs/Web/API/DataTransfer
DataTransfer - Web API | MDN
DateTransfer 객체는 드래그 앤 드롭 작업 중에 드래그되고 있는 데이터를 보관하기 위해 사용됩니다. 각각의 데이터 타입들에 해당하는 하나 이상의 데이터 항목을 포함할 수 있습니다. 드래그 앤
developer.mozilla.org
'JavaScript' 카테고리의 다른 글
소수 구하기 (에라토스테네스의 체) (0) | 2023.09.01 |
---|---|
cypress & cypress studio 사용하기 (e2e 테스트) (0) | 2023.08.28 |
input 붙여넣기 방지하기 (0) | 2023.08.08 |
Javascript 메모리 누수가 발생하는 경우 (0) | 2023.08.03 |
localStorage와 sessionStorage 알아보기 (0) | 2023.07.23 |