Comunidad de diseño web y desarrollo en internet online

drag and drop / o sortable

Citar            
MensajeEscrito el 03 Jul 2011 04:51 am
Buenas noches, podrian ayudarme necesito utilizar de alguna de las librerias jquery, mootools, o prototype, realizar un drap and drop, que cuande se pase un item a otro div, automaticamente se guarde en la base de datos, y muestre el numero actual de cada item del div.

gracias!

Por caliches52

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Jul 2011 02:01 am
Hola!, mira no se si te pueda dar alguna mejor idea, pero yo hace unas semanas hize un ejercicio parecido a lo que quieres, simplemente debes agregar el siguiente código HTML si quieres una caja nueva:

<div class="contenedorCaja">
<div class="cajas">
CAJA 12
</div>
</div>

Sólo que usan posiciones absolutas, por lo que si se cambia de tamaño la ventana o se quita y se pone un elemento nuevo, estas seguiran en el mísmo lugar.

Usa libreria JQuery, esta algo desordenado y todas las variables y funciones son públicas jeje.

Aquí el código:

Código HTML :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml/DTD/xhtml1-transitional.dtd">
<html>
<head>
<style>
*{
 margin:0px;
 padding:0px;
}
body{
 margin:0 auto;
}
#contenedor{
 //width:auto;
 float:left;
}
.contenedorCaja{
 width:300px;/*400px*/
 height:100px;/*100px*/
 margin:5px;
 float:left;
}
.cajas{
 width:296px;/*400px*/
 height:96px;/*100px*/
 border:2px solid #000;
 text-align:center;
 position:absolute;
 background:blue;
 color:#fff;
 font-weight:bold;
}
.caja-activa{
 z-index:9999;
 border:2px solid red;
}
#espacio_caja{
 position:absolute;
 border:2px dashed gray;
 width:100px;height:100px;
 display:none;
}
</style>
<title>onresize test</title>
<script src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
<script type="text/javascript">
var difX,difY,ThisCaja,origenX,origenY,origenes;
$(document).ready(function(){
 $(".cajas").mousedown(function(){return false});
 origenes={length:0};
 origenes_default={length:0};
 $(".cajas").each(function(i,v){
  cajaID="caja"+i;
  $(this).attr("id",cajaID);
  x=$(this).position().left;
  y=$(this).position().top;
  origenes[cajaID]={x:x,y:y,x2:x+$(this).outerWidth(),y2:y+$(this).outerHeight()};
  origenes_default[cajaID]={x:x,y:y,x2:x+$(this).outerWidth(),y2:y+$(this).outerHeight()};
  origenes.length+=1;
  origenes_default.length+=1;
  R=parseInt(Math.random()*9);
  G=parseInt(Math.random()*9);
  B=parseInt(Math.random()*9);
  $(this).css({left:x+"px",top:y+"px",backgroundColor:"#"+String(R)+String(G)+String(B)});
 });
 $(".cajas").mousedown(function(event){
   inicio=false;
   x=event.pageX?event.pageX:event.x;
   y=event.pageY?event.pageY:event.y;
   origenX=origenes[$(this).attr("id")].x;
   origenY=origenes[$(this).attr("id")].y;
   difX=x-origenX;
   difY=y-origenY;
   ThisCaja=$(this);
   $(this).addClass("caja-activa");
   $("#espacio_caja").css({left:origenX+"px",top:origenY+"px",display:"block",width:$(ThisCaja).innerWidth()+"px",height:$(ThisCaja).innerHeight()+"px"});
   $(window).bind("mouseup",soltar);
   $(window).bind("mousemove",mover);
 });
});
//var caja_previa="";var seguir=true;
function mover(event){
 x=event.pageX?event.pageX:event.x;
 y=event.pageY?event.pageY:event.y;
 finalX=x-difX;
 finalY=y-difY;
 $(ThisCaja).css({left:finalX+"px",top:finalY+"px"});
 for(i=0;i<origenes.length;i++){
 o=origenes["caja"+i];
 w=$(ThisCaja).outerWidth();
 h=$(ThisCaja).outerHeight();
 /*w_sec=caja_previa?$(caja_previa).outerWidth():0;
 h_sec=caja_previa?$(caja_previa).outerHeight():0;*/
 //sumar w a finalX  o h a finalY dependiendo de la necesidad
   if(x>=o.x && x<=o.x2 && y>=o.y && y<=o.y2 && "caja"+i!=$(ThisCaja).attr("id"))// && "caja"+i!=$(caja_previa).attr("id") && seguir)
   {
    a=origenes[$(ThisCaja).attr("id")];
    b=origenes["caja"+i];
    a_x_old=a.x;
    a_y_old=a.y;
    //Invertir posiciones
    $("#caja"+i).animate({left:a.x+"px",top:a.y+"px"},"slow");
    //if(caja_previa=="")caja_previa=$("#caja"+i);
    $("#espacio_caja").css({left:b.x+"px",top:b.y+"px",display:"block",width:$(ThisCaja).innerWidth()+"px",height:$(ThisCaja).innerHeight()+"px"});
    a.x=b.x;a.x2=a.x+$(ThisCaja).outerWidth();
    a.y=b.y;a.y2=a.y+$(ThisCaja).outerHeight();
    b.x=a_x_old;b.x2=b.x+$("#caja"+i).outerWidth();
    b.y=a_y_old;b.y2=b.y+$("#caja"+i).outerHeight();
    origenX=a.x;
    origenY=a.y;
    seguir=false;
    break;
   }
   /*else if("caja"+i==$(caja_previa).attr("id") && !seguir && (finalX>o.x+w_sec || finalY>o.y+h_sec || finalX+w<o.x || finalY+h<o.y)){
    caja_previa="";alert(1);
   }  */
 }
}
function soltar(event){
 $(ThisCaja).removeClass("caja-activa");
 $(window).unbind({mousemove:"",mouseup:""});
 $(ThisCaja).css({left:origenX+"px",top:origenY+"px"});
 $("#espacio_caja").css("display","none");
}
</script>
</head>
<body>
<div id="espacio_caja"></div>
<div id="contenedor">
 <div class="contenedorCaja">
  <div class="cajas">
   CAJA 1
  </div>
 </div>

<div class="contenedorCaja">
  <div class="cajas">
    CAJA 2
  </div>
 </div>

 <div class="contenedorCaja">
  <div class="cajas">
    CAJA 3
  </div>
 </div>

 <div class="contenedorCaja">
  <div class="cajas">
    CAJA 4
  </div>
 </div>

 <div class="contenedorCaja">
  <div class="cajas">
    CAJA 5
  </div>
 </div>

 <div class="contenedorCaja">
  <div class="cajas">
    CAJA 6
  </div>
 </div>

 <div class="contenedorCaja">
  <div class="cajas">
    CAJA 7
  </div>
 </div>

 <div class="contenedorCaja">
  <div class="cajas">
    CAJA 8
  </div>
 </div> 

<div class="contenedorCaja">
  <div class="cajas">
    CAJA 9
  </div>
 </div>

 <div class="contenedorCaja">
  <div class="cajas">
    CAJA 10
  </div>
 </div>

 <div class="contenedorCaja">
  <div class="cajas">
    CAJA 11
  </div>
 </div>

 <div class="contenedorCaja">
  <div class="cajas">
    CAJA 12
  </div>
 </div>

</div>
<input type="button" value="Reiniciar posiciones" onclick="$('.cajas').each(function(){od=origenes_default[$(this).attr('id')];o=origenes[$(this).attr('id')];$(this).animate({left:od.x+'px',top:od.y+'px'},'slow');o.x=od.x;o.y=od.y;o.x2=o.x+$(this).outerWidth();o.y=od.y;o.y2=o.y+$(this).outerHeight()});"/>
<div id="log" style="clear:both"></div>
</body>
</html>

Saludos

Por angelfcm

1 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.