1. 정의
- on()와 드래그&드랍 리스너를 이용하여 구현
1) 드래그 & 드롭 이벤트
분류 | 이벤트 | 발생타이밍 |
드래그 | dragstart | 드래그를 시작 |
| drag | 드래그 중 |
| dragend | 드래그 종료 |
드롭 | dragenter | 드래그 요소가 드롭 영역에 들어감 |
| dragover | 드래그 요소가 드롭 영역에 있다 |
| dragleave | 드래그 요소가 드롭 영역 벗어남 |
| drop | 드롭 |
2. 예제
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.main{
width: 300px;
height:300px;
border: 1px solid black;
}
.drop {
width: 300px;
height:300px;
border: 1px solid black;
}
</style>
</head>
<div class="main">
<img src="small.png" id="drag" draggable="true"/>
</div>
<hr>
<div class="drop" id="drop"></div>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"></script>
<script>
$(function(){
$('#drag').on({
//드래그 시작시 요소 id 저장
'dragstart':function(e){
e.originalEvent.dataTransfer.setData('text',e.target.id);
$(this).css('border','solid 2px Red');
},
//드래그 종료
'dragend':function(e){
$(this).css('border','none');
}
});
$('#drop').on({
'dragenter':function(e){
$(this).css('background-color','#fc0');
},
'dragleave':function(e){
$(this).css('background-color','#ffc');
},
//브라우저 표중 동작 취소
'dragover':function(e){
e.preventDefault();
},
'drop':function(e){
$(e.target).append($('#'+e.originalEvent.dataTransfer.getData('text')));
e.preventDefault();
}
});
});
</script>

1) draggable = true
- 드래그 하고자 하는 태그에 속성을 부여한다
a. 기본으로 true로 정해진 태그
- 선택된 텍스트
- href
- src
2) DataTransfer
- 드래그 정보 관리
- 정보 셋팅: setData(키,값)
- e.originalEvent.dataTransfer.setData('text',e.target.id);
- 정보 취득 : getData(키)
- +e.originalEvent.dataTransfer.getData('text')
- 키 값으로 텍스트, 혹은 url 지정
3) preventDefault
- 브라우저의 표중 동작이 우선처리되어 드롭 조작을 방해 할수 있다
- 기본 동작을 취할 수 있도록 설정
4) originalEvent 프로퍼티
- 드래그&드롭의 고유 이벤트 프로퍼티
- jQuery : e.originalEvent.dataTransfer
- javascript : e.dataTransfer