miércoles, 11 de julio de 2012

Pequeño tutorial de Drag&Drop usando JQuery


Hola.
Hoy vamos a ver un pequeño tutorial que nos permita ver un poco por encima como trabajar con objetos “Drag&Drop” usando las librerías que JQuery nos proporciona.
Para ello, lo primero que vamos a hacer es crear un proyecto vacío en el que hacer nuestras pruebas.
Una vez creado el proyecto y agregada nuestra página vacía, agregaremos al proyecto los scripts de jquery y jquery-ui que vamos a necesitar. Para ello podemos descargarlos directamente de la página de JQuery o bien instalarlos mediante Nuget.
Con los scripts agregados, lo siguiente que haremos es agregar la referencia a nuestra página de pruebas.

<head runat="server">
<title></title>
<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="Scripts/jquery-ui-1.8.20.min.js"></script>
</head>

Ya tenemos nuestra página lista para ser desarrollada.
Vamos a crear dos “div”, uno que representara el objeto que vamos a arrastrar y otro que es la zona donde vamos a depositar el div arrastrado. Dentro de cada div vamos a poner una etiqueta que usaremos para mostrar diferentes mensajes.

<div id="dragable1" class="div_dragable" style="height: 100px; width: 100px; background-color: #B5B5FF; border: 1px solid #7272A0; left: 100px;">
<label id="etiqueta_drag" />
</div>
<div id="dropable" style="border: 1px solid #824F8E; background-color: #EA8EFF; width: 300px; height: 250px; top: 300px; left: 400px;">
<label id="etiqueta_drop" />
</div>

Le damos un poco de forma a los “div” definiendo en su style (también podéis ponerlo en un fichero css).
Bueno ya tenemos nuestro entorno de pruebas preparado. Vamos a trabajar.
Lo primero que haremos al cargar la página es declarar nuestro div “dragable” por medio del siguiente código

<head runat="server">
<title></title>
<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="Scripts/jquery-ui-1.8.20.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('div#dragable1').draggable();
}
);
</script>
</head>

Ya podemos arrastrar nuestro div por toda la pantalla….a que es fácil.
Ahora vamos a experimentar un poco con los eventos que tenemos disponibles sobre los objetos “draggable”.
Básicamente nos centraremos en los siguientes tres eventos
  • start(dragstart) à Se lanza en el momento en que iniciamos la acción de arrastrar un elemento “draggable”.
  • dragà Se lanza mientras estamos arrastrando un elemento “draggable
  • stop(dragstop) à Se lanza en el momento en que dejamos de arrastrar un elemento “draggable”.
A continuación vamos a ver como implementamos estos eventos.
Para ello vamos a modificar el código en el que declarábamos nuestro div “draggable”:

<script type="text/javascript">
$(document).ready(function () {
$('div#dragable1').draggable();
$('div#dragable1')
.bind('dragstart', function (event) {
if (!$(event.target).is('.div_dragable')) return false;
$(this).css('background-color', '#FFF07F');
$('label#etiqueta_drag').text('Drag start.');
})
.bind('drag', function (event) {
$(this).css('box-shadow', '10px 10px 10px #080808');
$('label#etiqueta_drag').text('Dragging.');
})
.bind('dragstop', function (event) {
$(this).css('box-shadow', '0px 0px 0px #080808');
$(this).css('background-color', '#7BFF47');
$('label#etiqueta_drag').text('Drag ends.');
});
}
);
</script>

Como podéis ver hemos implementado el código para que al iniciar la acción de arrastrar el div este cambie de color.
Además hemos implementado el evento “drag”, para que mientras estamos arrastrando el div este se muestro con un efecto de sombreado.
Finalmente hemos implementado el evento “dragstop” para quitar el efecto de sombra y volver a cambiar el color de div.
Además de estos efectos, en cada evento hemos modificado el texto de la etiqueta del div, para tener más claro en qué orden se ejecutan los eventos.
Ya para finalizar, vamos a agregar información al elemento arrastrable
Ahora vamos a ver cómo trabajar con los elementos que permites soltar elementos.
Al igual que hicimos con el divdraggable”, vamos a declarar el segundo div como “droppable”.

$('div#droppable').droppable();

Vamos a ver algunos de los eventos que podemos implementar sobre objetos “droppable”.
  • drop à Este evento se lanza en el momento en que soltamos un elemento sobre el elemento “droppable”.
  • out(dropout) à Este evento se lanza mientras se esté arrastrando un elemento y ese se encuentre fuera de la zona del elemento “droppable”.
  • over(dropover) à Este evento se lanza mientras se está arrastrando un elemento y este se encuentra sobre la zona del elemento “droppable”.
Ahora que ya hemos visto los eventos, vamos a implementar el siguiente código

$('#dropable')
.bind('drop', function () {
$('#etiqueta_drop').text('Elemento soltado.');
})
.bind('dropout', function () {
$('#etiqueta_drop').text('Elemento fuera de div droppable.');
})
.bind('dropover', function () {
$('#etiqueta_drop').text('Elemento sobre div droppable.');
});

En esta ocasión nos hemos limitados a cambiar la etiqueta del div “droppable” para poder ver en qué momento actúan cada uno de los eventos descritos.
Podeis descargaros el proyecto desde el siguiente enlace:
Hasta aquí este pequeño tutorial de “Drag&Drop” usando JQuery.
Espero que os haya resultado útil.

No hay comentarios:

Publicar un comentario