Foros del Web » Programando para Internet » Javascript » Frameworks JS »

draggable

Estas en el tema de draggable en el foro de Frameworks JS en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 29/03/2011, 09:47
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 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??
  #2 (permalink)  
Antiguo 29/03/2011, 09:54
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: draggable

Podria ser que el hecho de usar el metodo de jquery .css para aplicar atributos css relentize?, he comentado estas lineas
Código Javascript:
Ver original
  1. div.css("z-index", -8000);
  2.                 $("#capaFixDraggable").css("z-index", 8000);
y el empezar a draggar cambia drasticamente a mejor :S


¿El hecho de no igualar las variables a null al final del metodo, o usar delete podria estar causando memory leaks?

Última edición por leif_sk8er; 29/03/2011 a las 10:34
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:10.