Drag and drop usando Scriptaculous (1)
Para probarlas, debemos seguir el mismo procedimiento que con los efectos; descargar las librerías, alojarlas en un servidor propio y cargarlas en nuestra plantilla. Empecemos con esto ya que es una pregunta repetida y hay varias alternativas.
Si no tenemos nada, debemos de empezar descargando el ZIP
que contiene todos los archivos necesarios y luego alojarlos en un servidor propio. Como mínimo, necesitaremos los siguientes scripts:prototype.js
scriptaculous.js
effects.js
dragdrop.js
el resto son optativos; cada uno de ellos se utiliza para poder implementar funciones especiales (builder.js, controls.js, slider.js, sound.js).
Los agregamos a la plantilla, justo antes de </head>:
<script type="text/javascript" src="URL_prototype.js"></script>
<script type="text/javascript" src="URL_scriptaculous.js?load=effects,dragdrop"></script>
<script type="text/javascript" src="URL_scriptaculous.js?load=effects,dragdrop"></script><script src="http://www.google.com/jsapi"></script>
<script>
google.load("prototype", "1.6.0.2");
google.load("scriptaculous", "1.8.1");
</script>
Una última posibilidad es usar Protoculous que es una librería comprimida y que en un solo archivo nos permite usar todas las funciones

Bueno, ahora que ya tenemos los scripts, vamos a ver como funcionan.
new Draggable(elemento);
Suena complicado pero no lo es, bastan dos líneas de código; por ejemplo:
<div id="demo"> [ ... el contenido ... ] </div>
<script type="text/javascript"> new Draggable('demo'); </script>

<div style="text-align: center;font-size:17px;">
La palabra
<span id="demo1" style="color:#FF0000;font-weight:bold;cursor:move;">MOVER</span>
se puede arrastrar.
</div>
<script type="text/javascript">new Draggable('demo1');</script>


<img id="demo2" src="URL_imagen"/>
<script type="text/javascript">new Draggable('demo2');</script>
<script type="text/javascript">
new Draggable(IDelemento, opciones);
</script>
new Draggable('demo', {revert:true} );
new Draggable('demo', {snap: [100, 50]} ); se mueve cada 100 pixeles horizontales y 50 pixeles verticales
new Draggable('demo', {ghosting:true} );
new Draggable('demo', {constraint:"horizontal"} );
new Draggable('demo', {constraint:"vertical"} );
new Draggable('demo', {handle:'barraDesplazamiento',constraint:'horizontal'});
new Draggable('demo', {starteffect: unaFuncion('demo')} );
new Draggable('demo', {endeffect: otraFuncion('demo')} );
onStart se ejecuta cuando comenzamos a arrastar el objeto
onDrag se ejecuta mientras arrastamos el objeto
change se ejecuta cuando cambiamos la posición original del objeto
onEnd se ejecuta cuando soltamos el objeto
var unNombre = new Draggable('demo', {revert: true});
.......
unNombre.destroy();
<div style="border:1px solid #444444; height:250px; overflow:hidden; position:relative;
margin:10px auto; width:450px;">
<img style="cursor:move; position:absolute; left:10px; top:10px;"
id="demoIMG1" src="URL_imagen1" />
<img style="cursor:move; position:absolute; left:390px; top:10px;"
id="demoIMG2" src="URL_imagen2" />
<img style="cursor:move; position:absolute; left:10px; top:190px;"
id="demoIMG3" src="URL_imagen3" />
<img style="cursor:move; position:absolute; left:390px; top:190px;"
id="demoIMG4" src="URL_imagen4" />
</div>
<script type="text/javascript">
new Draggable('demoIMG1');
new Draggable('demoIMG2');
new Draggable('demoIMG3');
new Draggable('demoIMG4');
</script>



























12 comentarios:
:D
¡Cerca de poder armar un ajedrez! Como es (1), no pregunto si hay una coordenada z para mover al alfil. ¿Se podría aplicar a cualquier elemento, siempre que se la asigne ID?
Gracias, gracias, gracias.
(Espero (2) mientras me enojo con la lentitud de la tabla de contenidos.)
Enorme el tutorial.
La verdad que da juego Scriptaculous (por no hablar del nombrecito...).
Juntas a Scriptaculous, Papadopoulus y Papalukas y te montas un equipo de miedo xD.
Genial, genial, eres un auténtico genio virtual JMiur!
Sí, ls, puede aplicarse a cualquier elemento así que, el ajedrez sería posible :D
¿Y no falta Jabbapolus en la lista? :D
Bueno, si pones a Jabbapolus ya solo nos falta el pívot xD.
Siempre me imaginé un blog donde se pudieran arrastrar todos los elementos y que cuando el mismo usuario vuelve a entrar (debe registrarse para guardar la info) los elementos aparecen como los acomodó, o sea como le gusta ver el sitio.
:-)
Algo de eso podría hacerse. Lamentablemente, no conozco como se maneja el tema de las cookies pero ese podría ser un punto de partida.
Lo del registro sería mejor porque podrían guardarse los datos en alguna parte.
Justo lo que comentaba el otro día que había visto hace tiempo, pero explicado magistralmente si señor :)
Gracias Gem@ :D
Ojalá que vaya todo bien en Wordpress :), buena explicación, como siempre.
Saludos JMiur.
No hay ningún motivo para que no funcione pero ... uno nunca sabe :D
Muy bueno, me han sido de gran ayuda los scripts y los comentarios que están aquí. Gracias desde Uruguay
¿Quiere dejar un comentario?
Utilice el formulario adjunto para comunicarse.
Enlaces