English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

HTML5 드래그 앤 드롭

드래그 앤 드롭은 대표적인 기능으로, 대상을 잡아서 다른 위치로 끌어올리는 것입니다. HTML5 에서, 드래그 앤 드롭은 표준의 일부입니다. 어떤 요소든지 드래그 앤 드롭할 수 있습니다。

HTML5 드래그 앤 드롭(Drag and Drop)

드래그 앤 드롭(Drag and drop)는 HTML5 표준 구성 요소입니다.

oldtoolbag.com 아이콘을 사각형 상자 안으로 드래그하세요.

드래그 앤 드롭

드래그 앤 드롭은 대표적인 기능으로, 대상을 잡아서 다른 위치로 끌어올리는 것입니다.

HTML5 에서, 드래그 앤 드롭은 표준의 일부입니다. 어떤 요소든지 드래그 앤 드롭할 수 있습니다。

브라우저 지원

Internet Explorer 9+, Firefox, Opera, Chrome, 그리고 Safari가 드래그 앤 드롭을 지원합니다。

주의:Safari 5.1.2드래그 지원하지 않습니다.

HTML5 드래그 앤 드롭 예제

아래 예제는 간단한 드래그 앤 드롭 예제입니다:

온라인 예제

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8"> 
<title>기본 가이드(oldtoolbag.com)</title>
<style type="text/css">
#div1 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
</style>
<script>
function allowDrop(ev)
{}}
    ev.preventDefault();
}
function drag(ev)
{}}
    ev.dataTransfer.setData("Text",ev.target.id);
}
function drop(ev)
{}}
    ev.preventDefault();
    var data=ev.dataTransfer.getData("Text");
    ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>
<p>拖动 oldtoolbag.com 图片到矩形框中:</p>
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<br>
<img id="drag1" src="/static/images/logo-n.png" draggable="true" ondragstart="drag(event)" width="336" height="69">
</body>
</html>
测试看看 ‹/›

它看上去也许有些复杂,不过我们可以分别研究拖放事件的不同部分。

设置元素为可拖放

首先,为了使元素可拖动,把 draggable 属性设置为 true :

        <img draggable="true">

拖动什么 - ondragstart 和 setData()

然后,规定当元素被拖动时,会发生什么。

在上面的示例中,ondragstart 属性调用了一个函数,drag(event),它规定了被拖动的数据。

dataTransfer.setData() 方法设置被拖数据的数据类型和值:

        function drag(ev)
{}}
    ev.dataTransfer.setData("Text",ev.target.id);
}

Text 是一个 DOMString 表示要添加到 drag object 的拖动数据的类型。值是可拖动元素的 id ("drag1")。

放到何处 - ondragover

ondragover 事件规定在何处放置被拖动的数据。

默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。

这要通过调用 ondragover 事件的 event.preventDefault() 方法:

event.preventDefault()

进行放置 - ondrop

当放置被拖数据时,会发生 drop 事件。

在上面的示例中,ondrop 属性调用了一个函数,drop(event):

  function drop(ev)
{}}
    ev.preventDefault();
    var data=ev.dataTransfer.getData("Text");
    ev.target.appendChild(document.getElementById(data));
}

코드 설명:

  • preventDefault() 호출하여 데이터의 기본 처리를 방지합니다(드롭 이벤트의 기본 행동은 링크로 열리는 것입니다)

  • dataTransfer.getData("Text") 메서드를 사용하여 드래그된 데이터를 얻습니다. 이 메서드는 setData() 메서드에서 동일한 타입으로 설정된 모든 데이터를 반환합니다.

  • 푸시드 데이터는 드래그된 요소의 id ("drag1)

  • 푸시드 요소를 드래그된 요소(목표 요소)에 추가합니다

更多示例

HTML5이미지를 오고 가게 드래그 앤 드롭
두 개의 <div> 요소 사이에 이미지를 드래그 앤 드롭하는 방법.