Realizar un efecto drag & drop (arastrar y soltar) en tu web es muy sencillo.
Basta con indicar cuales son los objetos que serán arastrados y cuales serán los objetos donde pueden encajar, y luego, un poco de javascript.
Veamos un ejemplo:
- <!DOCTYPE HTML>
- <html>
- <head>
- <style type="text/css">
- #caja {
- text-decoration: none;
- color: #000;
- margin: 10px;
- width: 150px;
- min-height: 150px;
- border: 3px dashed #999;
- background: #eee;
- padding: 10px;
- display: block;
- }
- #objetos {
- text-decoration: none;
- color: #000;
- margin: 10px;
- width: 150px;
- min-height: 150px;
- border: 3px dashed #999;
- background: #eee;
- padding: 10px;
- display: block;
- }
- .derecha {float:right}
- .izquierda {float:left}
- </style>
- <script>
- function leaveDrop(ev) {
- ev.preventDefault();
- ev.target.style.backgroundColor="#cccccc";
- }
- function allowDrop(ev) {
- ev.preventDefault();
- ev.target.style.backgroundColor="#eeeeee";
- }
- function drag(ev) {
- var nodo = ev.target.id;
- ev.dataTransfer.setData("nodo",nodo);
- }
- function drop(ev) {
- ev.preventDefault();
- var idNodo=ev.dataTransfer.getData("nodo");
- nuevoNodo=document.getElementById(idNodo).cloneNode(true);
- ev.target.appendChild(nuevoNodo);
- ev.target.style.backgroundColor="#cccccc";
- }
- </script>
- </head>
- <body>
- <div id="main">
- <div id="caja" class="izquierda"
- ondrop="drop(event)"
- ondragleave="leaveDrop(event)"
- ondragover="allowDrop(event)">
- </div>
- <div id="objetos" class="izquierda" >
- <div id="elem1" draggable="true"
- ondragstart="drag(event)">
- Elemento 1
- </div>
- <div id="elem2" draggable="true"
- ondragstart="drag(event)">
- Elemento 2
- </div>
- <div id="elem3" draggable="true"
- ondragstart="drag(event)">
- Elemento 3
- </div>
- </div>
- </div>
- </body>
- </html>
Dentro del objeto div#objetos hemos creado tres elementos que serán los que se podrán mover, marcados como elem1, elem2 y elem3. Cada uno de ellos con atributos draggable y ondragstart. Este último llama a la función drag().
El objeto div#caja será el encargado de recibir los objetos, y está marcado con los atributos ondrop, ondragleave y ondragover. Llamará a las funciones drop(), leaveDrop() y allowDrop() respectivamente.
Veamos ahora que trabajo realiza cada una de estas funciones:
- Función drag(): Prepara para la transferencia el atributo id del objeto que vamos a arrastrar. Para ello se sirve de ev.dataTransfer.setData().
- Función drop(): Recibe el atributo del objeto con ev.dataTransfer.getData, lo clona y lo anexa al objeto dropable, en nuestro caso el div#caja.
- Función allowDrop(): Se ejecuta cuando un objeto que estamos arrastrando entra en div#caja.
- Función leaveDrop(): Al contrario que la anterior, se ejecuta cuando salimos del div#caja. En el ejemplo usamos estas funciones para cambiar el color de fondo del objeto.
Bastante sencillo, ¿no crees?
Efecto drag & drop (arrastrar y soltar) con javascript publicado en BajoLinux.