Tema: draggable
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/03/2011, 09:47
leif_sk8er
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 15 años, 6 meses
Puntos: 5
draggable

Buenas, estoy utilizando jquery y jquery ui, y estoy haciendo que un div sea draggable. COmo los divs que quiero que sean draggables son cargados dinamicamente he tenido que crear una funcion llamada livedraggable. A continuacion os pongo el codigo que uso para el livedraggable, y la parte del draggable con los metodos que necesito.

Código Javascript:
Ver original
  1. function liveDraggable(selector, options){
  2.   jQuery(selector).live("mouseover",function(){
  3.     if (!jQuery(this).data("init")) {
  4.       jQuery(this).data("init", true);
  5.       jQuery(this).draggable(options);
  6.     }
  7.   });
  8. }
  9.  
  10.  
  11.  
  12. $(document).ready(function(){
  13.  
  14. var abierto=0; //
  15.     liveDraggable("div.widget",{
  16.         cancel: '.noDraggable',
  17.         cursor: "move",
  18.         cursorAt: { top: 15, left: 15 },
  19.         //iframeFix: true,
  20.         //handle: '.w_acciones, .mover_comunidad',
  21.         containment: '.contenido_widgets',
  22.        
  23.        
  24.         helper : function() {  
  25.             //ordenZ();
  26.             var div = $(this);
  27.                    
  28.                 top_mover_widget=div.css("top");
  29.                 left_mover_widget=div.css("left");
  30.            
  31.                 div.css("z-index", -8000);
  32.                 $("#capaFixDraggable").css("z-index", 8000);
  33.                
  34.        
  35.             return '<div class="ghost-x red_todo_5"></div>';
  36.         },
  37.        
  38.        
  39.        
  40.  
  41.  
  42.         stop: function(){
  43.         var div = $(this);
  44.         div.css("top", $('.ghost-x').css("top")).css("left", $('.ghost-x').css("left")).css("z-index", 1003); // Le ponemos en la posicion y volvemos la opacidad del widget a 1.
  45.         $("#capaFixDraggable").css("z-index", -8000);
  46.        
  47.            
  48.             $("#menu_escritorios").css('z-index', '-9999');  // Ocultamos el menu de cambio de escritorio
  49.             escritorio=0; // Ponemos a cero para decirle que el panel de escritorios esta cerrado
  50.                
  51.                     // Condiciones por si superan el top o height y que no queden medio ocultos
  52.                     var win = $(window),
  53.                         alto_pantalla = win.height(),
  54.                         ancho_pantalla = win.width(),
  55.                         nuevo_top = parseInt(div.css("top")),
  56.                         nuevo_left = parseInt(div.css("left")),
  57.                         status_height = $("#status_bar_widgets").height(),
  58.                         cabeza_height = $("#cabeza").height();
  59.                        
  60.                    
  61.                     // Que no pase por ABAJO
  62.                     if((nuevo_top + div.outerHeight(true)) > alto_pantalla - status_height){
  63.                     nuevo_top =  alto_pantalla - status_height - div.outerHeight(true) - 7; // 15 tiene que ser por los margenes para que se adapte al pie del escritorio
  64.                     }
  65.                     // Que no pase por la DERECHA
  66.                     if((nuevo_left+ div.outerWidth(true)) > ancho_pantalla-14){
  67.                     nuevo_left = ancho_pantalla - div.outerWidth(true)-14;
  68.                     }
  69.                
  70.                     // Que no pase por ARRIBA
  71.                     if(nuevo_top < cabeza_height + 5){
  72.                     nuevo_top = cabeza_height + 5;
  73.                     }
  74.                     // Que no pase por la IZQUIERDA
  75.                     if(nuevo_left < 0){
  76.                     nuevo_left=0;
  77.                     }
  78.                     div.css("top", nuevo_top+"px").css("left", nuevo_left+"px");
  79.                    
  80.                    
  81.                     // Guardamos la posicion de los widgets
  82.                     var top = nuevo_top+"px",
  83.                         left = nuevo_left+"px",
  84.                         ancho = ancho_pantalla,
  85.                         alto = alto_pantalla,
  86.                         z = 1003;
  87.                         idd_widget = div.attr('idd');
  88.                     $.post(ruta_ajax+"&carpeta=widgets&s=1", {widget:idd_widget, top:top, left:left, ancho:ancho, alto:alto, z:z});
  89.                    
  90.            
  91.         return false;
  92.         }
  93.        
  94.     });
  95.  
  96. })



El problema que tengo es que la aplicacion se me relentiza una barbaridad... mas cuanto mas antiguo sea el ordenador... entonces
¿Veis algo que pudiera estar poco optimizado o mal programado?

Lo que hago es mostrar un div al empezar el draggable, por que mover directamente el div con el contenido inicial relentiza mucho, por el hecho de mover el contenido por encima de todo el resto que hay en la pagina.... con lo que añado un div vacio de color chillon... Despues en el stop compruebo que no pase del ancho y alto de la pantalla, para que quede dentro.

El principal problema lo tengo al empezar el draggable... supongo que en el helper... pero en el helper no veo nada problematico :S, es muy simple...

Alguna idea??