Para empezar con este ejemplo crearemos dos Div (uno para comida y otro para bebida) añadiendo la propiedad draggable="true" refiriéndonos a que este Div como arrastrable. El codigo sería este:
<div id="comida" draggable="true"> <img src="comida.png" width="128" height="128"/></div> <div id="lata" draggable="true"> <img src="lata.png" width="128" height="128" /></div>
Ahora crearemos otro Div llamado lista que será donde arrastraremos las imagenes de comida y lata.
<div id="lista"> </div>
<script> //Al empezar el arrastramiento function empezar(e ){ //Definimos el objeto arrastrado (su Id)como Text e.dataTransfer.setData('Text', this.id); //Permitimos dejarlo en sitio de 'mover' e.dataTransfer.effectAllowed = 'move'; } //Al llegar a la zona de destino 'List de compra' function lista_compra(e ) { // Dejamos mover e.dataTransfer.dropEffect = 'move'; // Dejamos soltar return false; } // Al soltar function soltar (e ) { //Indicamos el producto que ha comprado //creamos una imagen imagen = new Image(); //La imagen será igual a la que arrastramos imagen.src = e.dataTransfer.getData('Text') + '.png'; //añadimos la imagen a la lista document.getElementById('lista').appendChild(imagen); }
//Conectamos los eventos //ondragover - Al mover sobre la lista document.getElementById('lista').ondragover = lista_compra; //ondragstart - Al empezar a arrastrar document.getElementById('comida').ondragstart = empezar; //ondragstart - Al empezar a arrastrar document.getElementById('lata').ondragstart = empezar; //ondrop - Al soltar document.getElementById('lista').ondrop = soltar; </script>
No olviden escribir su comentario!!!
ostia!!!
ResponderEliminarmuchas gracias por la publicación me ha sido de gran ayuda!!! :D
tu CSS!
Reescribo comentario, el original se perdio por accidente :
ResponderEliminarMuchas gracias y me alegro. Seguiré ampliando el blog :)
hola una pregunta por que? me manda a la imagen en una ventana nueva..
ResponderEliminarGracias....
Creo que depende de la configuración de tu Pc o navegador. Prueba con otro navegador aver que tal!
EliminarA mi me pasa igual. En chrome funciona perfectamente, pero en firefox no. Estoy dandole vueltas al código para solucionar lo de firefox pero no lo consigo.
EliminarSi haces un código y lo publicas, mira antes de que funcione en varios navegadores, siendo firefox uno de los más importantes.
Muchas gracias por tu comentario, sin embargo opino que la mayoria de usuarios utilizan Chrome.
EliminarSi conseguís el código comatible con firefox estaría encantado que lo publicárais para ayuda de los demás. Muchas gracias!
hola disculpa una preguntita si quiero que al soltar se mueva donde este el mouse se podria hacer?
ResponderEliminarSupongo que si que se podrá lo que yo no lo he probado. Quizás alguien lo haya hecho y nos podría ayudar :D
EliminarNo hay que programar para un navegador hay que hacerlo para todos, en FireFox (mi navegador preferido) no funciona. Hay gente que todavía usa IE 8,7,6...
ResponderEliminarGracias de todos modos.
Para Firefox la solución es agregar la línea:
ResponderEliminare.preventDefault();
al principio de la función soltar(), esto se debe hacer en cualquier función que maneje el evento ondrop. De esta forma el navegador detiene la acción por defecto que es abrir el link de la imagen.
Espero les sirva. Saludos.
Muchísimas gracias, me gusta que participemos todos. Muy útil.
EliminarMe da todo el rato problemas con el DataTransfer me pasa todo el rato el mismo problema por consola: Cannot read property 'dataTransfer' of undefined. Alguien sabe porque puede ser?? Gracias!!
ResponderEliminarPrueba a ver,añade:
Eliminare.dataTransfer = e.originalEvent.dataTransfer;
o substituyendo el primer termino por el segundo.
Esto encima de cada línea que te aparezca el error. Y nos cuentas.
no me funciona :(, no c por que
ResponderEliminarno sirve en IE9
ResponderEliminarhola, no se si se puede eliminar un elemento después de haberlo añadido en la cesta de compra?
ResponderEliminary me sale imagen rota en la lista de compra. no se porque, ayuda porfa
EliminarFíjate a ver en el tamaño del DIV o si as utilizado algún paddin o margin.
Eliminargracias, ya me funciona. el tema de eliminar o deshace una imagen que esta en la cesta de compra, sabes algo?
EliminarNo, lo siento.. yo intentaría añadirle al segundo cuandro las propiedades del primero también. así poder arrastrar de derecha a izquierda y de izquierda a derecha. Muchas gracias!!
EliminarHola, hay un metodo para eliminar la imagen arrastrada de la lista de comprar, es decir, una funcion que solo arrastre la imagen y se pueda quedar en el lugar arrastrado, saludos.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola gracias por el tutorial, mi pregunta es como hago para que los elementos de la caja productos se arrastren a la lista de compra solo una vez dejando una copia en la caja de productos
ResponderEliminarMuchos saludos
Como le hago para pasar solo un elemento de un lado al otro
ResponderEliminarmuy bueno
ResponderEliminar