Arrastar e Soltar HTML5

Arraste a imagem do CodeW3C.com para dentro do retângulo.

Arraste e solte

Arraste e solte (Drag e Drop) é uma característica comum. Refere-se a puxar algo e arrastá-lo para uma nova posição.

Arraste e solte é parte integrante do padrão HTML5: qualquer elemento é arrastável.

Suporte do navegador

Os números na tabela indicam a versão do navegador que suporta completamente o arraste e soltura.

API
Arraste e solte 4.0 9.0 3.5 6.0 12.0

Exemplo de arraste e soltura HTML

A seguir está um exemplo simples sobre arraste e soltura:

Exemplo

<!DOCTYPE HTML>
<html>
<head>
<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>
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<img id="drag1" src="img_logo.gif" draggable="true" ondragstart="drag(event)" width="336" height="69">
</body>
</html>

Experimente por Si Mesmo

Pode parecer um pouco complexo, mas vamos estudar todas as diferentes partes do evento de arraste e soltura.

Tornar o elemento arrastável

Primeiro: para tornar um elemento arrastável, defina a propriedade draggable como true:

<img draggable="true">

Conteúdo de arraste e soltura - ondragstart e setData()

Depois, defina o que acontece quando o elemento é arrastado.

No exemplo acima, a propriedade ondragstart chama uma função drag(event), definindo que dados serão arrastados.

O método setData() do dataTransfer define o tipo de dados e o valor dos dados arrastáveis:

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

Neste exemplo, o tipo de dados é "text" e o valor é o id do elemento arrastável ("drag1").

Para onde arrastar - ondragover

O evento ondragover determina onde os dados arrastados podem ser colocados.

Por padrão, os dados/elementos não podem ser colocados em outros elementos. Para implementar arrastar e soltar, devemos evitar esse comportamento padrão dos elementos.

Esta tarefa é realizada pelo método preventDefault() do evento ondragover:

event.preventDefault();

Realizar a Colocação - ondrop

Ocorre o evento drop quando o dado arrastado é solto.

No exemplo acima, a propriedade ondrop chama uma função, drop(event):

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

Explicação do Código:

  • Chame preventDefault() para evitar o processamento padrão do navegador dos dados (o comportamento padrão do evento drop é abrir como link)
  • Os dados arrastados são obtidos através do método getData() do dataTransfer. Este método retornará qualquer tipo de dados configurado no método setData().
  • Os dados arrastados são o id do elemento arrastado ("drag1")
  • Adicionar o elemento arrastado ao elemento de destino

Mais Exemplos

Arrastar e Soltar Imagens

Como arrastar e soltar imagens entre dois elementos <div>:

Arraste a imagem do CodeW3C.com para dentro do retângulo.

Experimente por Si Mesmo