Arrastar e Soltar HTML5

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

Arrastar e soltar

Arrastar e soltar (Drag e Drop) é uma característica muito comum. Ela se refere a puxar algo e soltá-lo em uma posição diferente.

Arrastar e soltar é 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 arrastar e soltar.

API
Arrastar e soltar 4.0 9.0 3.5 6.0 12.0

Exemplo de arrastar e soltar em HTML

A seguir está um exemplo simples sobre arrastar e soltar:

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 em Primeira Mão

Talvez pareça um pouco complexo, mas vamos estudar todas as diferentes partes do evento de arrastar e soltar.

Tornar o elemento arrastável

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

<img draggable="true">

Conteúdo de arrastar e soltar - ondragstart e setData()

Em seguida, determina o que acontece quando o elemento é arrastado.

No exemplo acima, a propriedade ondragstart chama uma função drag(event), definindo que dados devem ser 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 modo de processamento padrão do elemento.

Esta tarefa é concluída pelo método preventDefault() do evento ondragover:

event.preventDefault()

Realizar a Colocação - ondrop

Ocorre o evento drop quando soltamos os dados arrastados.

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 modo de processamento padrão do navegador dos dados (o comportamento padrão do evento drop é abrir como link)
  • Obtenha os dados arrastados usando o 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 em Primeira Mão