En los artículos anteriores del Manual de jQueryUI estuvimos hablando en profundidad sobre los elementos draggable, de modo que ahora vamos a ver la otra parte que nos queda, es decir, los elementos droppable. Aunque sean dos clases distintas, lo cierto es que si has podido entender bien como funciona draggable, no tendrás ningún problema en entender los detalles sobre droppable.
$("#soltable").droppable();
Con esto conseguimos que el elemento con id="soltable" detecte cuando algún elemento draggable se suelte encima de él. Claro que para hacer algo cuando arrastren un elemento hasta él, no nos servirá con invocar al plugin droppable, sino que tendremos que realizar alguna otra acción y para ello entran en juego los eventos.
Si queremos hacer algo cuando se suelte un elemento encima de un droppable, tendremos que definir el evento "drop", de esta manera.
$("#soltable").droppable({
drop: function( evento, ui ) {
$(this).html("Lo soltaste!!!");
}
});
Ese evento "drop" provocaría que, al soltar un elemento arrastrable encima del dropable, se cambie el texto que hay escrito en el elemento droppable.
Se puede ver un ejemplo de draggable que se puede soltar en un droppable.
Al invocar el plugin indicamos las opciones de configuración tal como estamos acostumbrados a hacer en jQuery, con notación de objeto y por medio de una serie de propiedades. Por ejemplo, podemos configurar la tolerancia con la que un elemento se acepta un elemento soltado con la propiedad de configuración "tolerance".
$("#soltable").droppable({
tolerance: "fit"
});
Con esto conseguimos que el elemento que soltamos, sólo se considere soltado en el objetivo cuando está completamente dentro del mismo.
Interesante es también la opción "accept" o "scope" (ambas sirven para lo mismo). Con ellas indicamos el rango de elementos aceptaría recibir un droppable, por medio de un selector. Se tiene que configurar como valor a alguna de esas dos propiedades, o las dos, el selector o selectores que sí se aceptarían.
$("#soltable").droppable({
accept: ".tarea"
});
Ese elemento solo aceptaría que se le soltasen elementos con el class "tarea". Para ser más exactos, sólo esos elementos de clase "tarea" provocarían que se lanzase el evento drop.
En la propia documentación de jQueryUI encontraréis otra serie de opciones interesantes.
$("#soltable").droppable({
out: function( evento, ui ) {
$(this).html("Ahora saliste...");
}
});
Ese evento produciría que se cambiase el texto del droppable por "Ahora saliste", cuando un elemento draggable, que sea aceptable, se salga del área de tolerancia.
También podemos definir eventos una vez se ha creado el droppable con el método bind() de jQuery.
$( "#soltable" ).bind( "drop", function(evento, ui) {
//código del evento
});
drop: function( event, ui ) {
ui.draggable.css("background-color", "#ddd");
}
Si queremos hacer alguna cosa cuando el elemento se retira del área donde se podría soltar, tenemos que utilizar el evento "out". Pero ojo, que ese evento "out" se ejecuta siempre que se sale del área soltable, independientemente si antes lo habíamos soltado allí o no. Luego haremos un ejemplo para ver este asunto.
Todos esos métodos se invocan como si estuviéramos invocando al propio plugin droppable, pero pasando como parámetro una cadena con el nombre del método a ejecutar, tal como estamos acostumbrados a hacer con diversos otros componentes jQueryUI, incluido el plugin draggable.
Por ejemplo, tenemos el método "disable" que sirve para inhabilitar un elemento droppable y se ejecutaría de la siguiente manera:
$("#elementodroppable").droppable("disable")
Otro ejemplo interesante es el método option, que sirve para definir opciones de configuración del elemento Lo ponemos en ejecución al pasar la palabra "option" y luego tenemos que indicar otro parámetro con el nombre de la opción al que queremos acceder, junto con un tercer parámetro con el nuevo valor de la opción, si es que deseábamos cambiarlo.
$("#soltable").droppable("option", "activeClass", "sueltaaqui");
Con eso conseguiríamos que, al iniciar el arrastre sobre un elemento que pueda soltarse en el elemento "#soltable", se aplique la clase "sueltaaqui". Esa clase CSS se pone en el elemento donde se puede soltar aquello que se está arrastrando, para que el usuario perciba dónde podría culminar su acción de drag&drop.
Si quisiéramos en algún momento saber qué clase se definió como "activeClass", podríamos hacerlo con:
$("#soltable").droppable("option", "activeClass")
Con lo visto hasta ahora ya debes tener una idea más o menos clara sobre cómo hacer sistemas de arrastrar y soltar medianamente complejos. No obstante, en el capítulo siguiente hacemos un nuevo ejemplo un poco más elaborado que seguramente te servirá para despejar algunas dudas que puedas tener todavía.
| Position absolute Por: Raul Mendoza | 29/9/2011
|