유저는 draggable element를 마우스로 선택하고, drag하여 droppable element에 drop한다.
interface : DragEvent, DataTransfer, DataTransferItem, DataTransferItemList
DragEvent : constructor와 DataTransfer 개체인 dataTransfer 프로퍼티를 갖는다.
DataTransfer 객체 : drag event state를 갖는다. 각 drag event는 dragTransfer 프로퍼티를 갖고 있다.
DataTransferItem
객체의 list이다.DataTransferItem 객체 : 하나의 Drag itemdlek.
kind
property : string or filetype
property : data item의 MIME typeDataTransferItemList 객체 : list of DataTransferItem 객체
DataTransfer와 DataTransferItem 인터페이스의 차이
DragTransferItem와 DragTransferItemList 인터페이스는 브라우저의 지원 범위가 제한된다.
<p draggable="true" ondragstart="event.dataTransfer.setData('text/plain', 'This text may be dragged')">
This text <strong>may</strong> be dragged.
</p>
dropEffect
프로퍼티는 유저에게 drag and drop 중에 어떠한 일이 일어나는지를 유저에게 피드백을 주는 역할을 한다. 주로, drag를 하는 동안 어떠한 cursor가 보일 것인지를 결정한다.
여기에 세 operation이 있고, 이를 조합한 것들도 존재한다.
dragstart
event listener 안에서 effectAllowed
프로퍼티에 어떠한 operation이 허용되는지를 지정할 수 있다.
drag operation이 일어나는 동안, dragenter
와 dragover
events는 effectAllowed 프로퍼티를 보고 어떠한 operation이 허용되는지를 확인한다. dropEffect
프로퍼티도 이 이벤트 중 하나에 지정되어야 한다.
dropEffect에 허용되는 operation은 none, copy, move, link 중 하나이다.
dragenter
와 dragover
이벤트에서 유효한 drop target인지를 지정한다. 대부분의 웹 페이지에서는 data를 drop하기에 적절하지 않으므로, 이 이벤트들의 디폴트 핸들러는 drop을 허용하지 않는 것이다.
따라서, drop을 허용하고 싶을 때는 dragenter
와 dragover
이벤트 둘 다에 디폴트 핸들링을 취소해야 한다. defaul handling을 취소하는 방법은
dragenter와 dragover 이벤트 둘 다에 preventDefault를 호출함으로써, 그 위치에 drop이 허용된다.
마우스가 drop target에서 놓아지면, drop 이벤트가 발생한다.
웹페이지에서 drop 이벤트 핸들러에 반드시 preventDefault
메서드를 호출해야 drop 이벤트를 받아들인다는 의미가 되고, 브라우저도 default handling을 수행하지 않게 된다. 예를 들어, firefox는 링크를 드래그하면, 링크를 열게 되는데, 이 디폴트 핸들링을 취소해야 한다.
drag가 끝나게 되면, dragend
이벤트가 source element(dragstart가 시작된 element)에 발생하게 된다.
drop이 성공했던, 실패했던 이 이벤트는 발생한다. 실패와 성공 여부는 dropEffect 프로퍼티로 알 수 있다.
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Syncing