Drag e drop é um dos efeitos mais requisitados em Ajax. Com drag e drop (arrasta e des larga) pode ser usado para diferentes coisas, tais como um carrinho de compras mais avançado do que os tradicionais para sites de comercio electrónico, uma maneira para o usuário do teu site poder organizar a informação/layout do teu site como desejar, criar jogos apenas usando Javascript e Ajax.
Enfim existe diversas maneiras de dar uso ao efeito drag e drop.
Neste exemplo/tutorial vamos usar o famoso prototype e o scriptaculous para alcançar o efeito de uma maneira simples e eficaz.
O primeiro passo consiste em fazeres o download do prototype e o scriptaculous, de seguida copiares para uma directoria onde a tua aplicação/website esta alocada.
Para começar a usar de imediato basta pores entre as tags head a referencia aos ficheiros do prototype e o scriptaculous.
Vamos começar por criar uma caixa que tem um titulo e um pouco de texto onde vamos querer o efeito drag (arrastar) quando o usuário clica e não des larga a caixa.
Reparar que temos um onClick='efeitoDragSimples()', basicamente serve para quando o usuário clica na caixa chamar a nossa função em Javascript para lidar com o efeito.
Para tal temos que ter a função em Javascript entre as tags head.
Uma linha? Só uma linha? Sim, simples não é?
Com prototype e scriptaculous basta apenas uma linha para poder aplicar o efeito desejado.
Experimenta na caixa em baixo.
Isto move-se de um lado para o outro.

De momento para esta caixa as opções encontram-se vazias.
Claro que basta uma linha de código para alcançar o efeito desejado mas scriptaculous oferece nos mais opções.
Vamos analisar as opções.
Quando começas a arrastar / drag uma caixa e des largas numa nova posição de momento a caixa fica nessa posição, com o revert activado a caixa volta a posição inicial.
Para testarmos vamos criar uma nova caixa e uma nova função em Javascript.
Basicamente o código é quase idêntico a caixa anterior apenas mudamos o valor do ID para ser mais fácil de referenciar na nova função que vai lidar com a caixa efeitoDragRevert()
Vamos então criar a nova função.
Ver o efeito em acção:
Isto move-se de um lado para o outro, mas volta sempre para a posição inicial.
Z-index faz parte de CSS basicamente permite ordenar layers de caixas.Uma caixa com um z-index de 1 fica por baixo de uma caixa com um z-index de 2.
Podemos assim controlar a ordem das caixas quando estão uma por cima de outra.
Vamos então repetir o processo, uma nova caixa e uma nova função.
A função em Javascript.
Resultado.
Isto fica por cima de todos.
Com a opção Constraint podes limitar o movimento da caixa, e de momento tem duas escolhas vertical e horizontal.
Nova caixa:
A nova função em Javascript:
Esta caixa so se move na posição horizontal.
OnStart podes usar para chamar outra função e é activado quando o usuário começa a arrastar a caixa.
OnEnd serve para a mesma coisa, mas so chama outra função quando o usuário para de arrastar a caixa.
Nova caixa:
A nova função em Javascript:
Como podemos ver onStart chama uma nova função MostraMensagem e onEnd chama EscondeMensagem, por isso vamos adicionar duas novas funções.
Simplesmente mostra e esconde outra caixa que temos na aplicação.
A funcionar!
Esta caixa quando arrastas mostra uma mensagem noutro sitio, quando paras de arrastar a mensagem desaparece.
Sem duvida que scriptaculous e prototype simplificam bastante a maneira que podemos criar o efeito do drag e drop.
Com varias opções da liberdade para criarmos varios tipos de efeito.
E não esquecer podes misturar todas as opções aqui explicadas.
Obrigado, e por favor deixe o seu comentário e votação no blog.