2010-09-02 11 views

Respuesta

137

Se podría establecer el cambio de tamaño handles option para mostrar sólo a la izquierda y la derecha (o hacia el este/oeste), así:

foo.resizable({ 
    handles: 'e, w' 
});​ 

You can give it a try here.

+7

que acaba de encontrar una advertencia con esta solución.Todavía pondrá el ancho y alto cuando se hace como un estilo en línea. Esto me está causando problemas con una solución solo vertical. Una vez que lo cambie de tamaño, se establece el ancho y ya no es 100% (sino un valor de px). Solo poniendo esto aquí en caso de que otros estén buscando y lo encuentren. – Fernker

+0

@Fernker Sí, eso es un dolor. – Ben

+0

puede obtener un porcentaje de ancho si le otorga propiedades de ancho mínimo y ancho máximo del mismo valor a su div. No se anulará :) –

9

La solución consiste en configurar el tamaño variable por lo que anula cambios de la dimensión que no quieres

aquí es un ejemplo de sólo verticalmente de tamaño variable:

foo.resizable({ 
    resize: function(event, ui) { 
    ui.size.width = ui.originalSize.width; 
    }  
}); 
+0

¿No sería eso demasiado feo? – Diego

+0

Me gusta esta solución. –

+2

maneja es la mejor solución – Alexandre

23

Mientras que el cartel estaba pidiendo principalmente para una horizontal de sólo cambiar el tamaño, la pregunta no pide vertical, también.

La carcasa vertical tiene un problema especial: es posible que haya establecido un ancho relativo (por ejemplo, 50%) que desee conservar incluso cuando se cambie el tamaño de la ventana del navegador. Sin embargo, jQuery UI establece un ancho absoluto en px una vez que primero cambia el tamaño del elemento y se pierde el ancho relativo.

Si se encuentra el siguiente código para trabajar para este caso de uso:

$("#resizable").resizable({ 
    handles: 's', 
    stop: function(event, ui) { 
     $(this).css("width", ''); 
    } 
}); 

Ver también http://jsfiddle.net/cburgmer/wExtX/ y jQuery UI resizable : auto height when using east handle alone

+1

Muy interesante, gracias. Lo tendré en cuenta. Creo que es importante señalar que el elemento redimensionable debe tener su ancho establecido por css si no se perderá después del cambio de tamaño. Vea aquí http://jsfiddle.net/paska/wExtX/10/ – Diego

+1

Esta es la solución que estaba buscando. Por alguna razón, a pesar de que el identificador está deshabilitado para la región, sus dimensiones parecen establecerse en px. Si no usas este método, pierdes tu% de altura o ancho. – Serhiy

+0

gracias, tengo solución. –

16

Una solución muy sencilla:

$(".selector").resizable({ grid: [1, 10000] }); // horizontal 
$(".selector").resizable({ grid: [10000, 1] }); // vertical 

Esto funciona para arrastrable() también. Ejemplo: http://jsfiddle.net/xCepm/

+1

¡Es realmente feo! Además, la solución correcta (la que se supone que debemos usar) es @Nick Craver's – Diego

+1

¡Estoy de acuerdo! :-) Pero es bueno que funcione con resizable() y arrastrable(). – Jan

+0

Sí, ¡eso es cierto! – Diego

0

quería para permitir cambiar el tamaño de la anchura cuando el navegador vuelve a tamaños, pero no cuando el usuario cambia el tamaño del elemento, esto funcionó bien:

foo.first().resizable({ 
    resize: function(event, ui) { 
    ui.element.css('width','auto'); 
    }, 
}); 
0

Para mí soluciones con las dos asas y el controlador resize funcionó bien, por lo que el usuario ve el controlador pero puede cambiar el tamaño solo horizontalmente, una solución similar debería funcionar para la vertical. Sin el manejador de la esquina inferior , el usuario podría ignorar que puede cambiar el tamaño del elemento.

Al usar ui.size.height = ui.originalSize.height;no funcionará correctamente si el elemento cambió su tamaño desde el estado inicial.

foo.resizable({ 
    // Handles left right and bottom right corner 
    handles: 'e, w, se', 
    // Remove height style 
    resize: function(event, ui) { 
     $(this).css("height", ''); 
    } 
}); 

Para un mejor rendimiento $(this) podrían eliminarse:

var foo = jQuery('#foo'); 
foo.resizable({ 
    // Handles left right and bottom right corner 
    handles: 'e, w, se', 
    // Remove height style 
    resize: function(event, ui) { 
     foo.css("height", ''); 
    } 
}); 
0
Successfully working div position Vertically and horizontally 
------------------------------------------------------------- 

<head> 

    <style> 
    .resizable { 
     height: 100px; 
     width: 500px; 
     background: #09C; 
    } 
    .resizable-x { 
     height: 100px; 
     width: 500px; 
     background: #F60; 
    } 
    </style> 

    <script> 
    $(function() { 

     $(".resizable").resizable({ 
      grid: [10000, 1] 
     }); 

     $(".resizable-x ").resizable({ 
      grid: [1, 10000] 
     }); 


     $(".resizable").draggable(); 
     }); 

     }); 
     </script>`enter code here` 
    </head> 

    <body> 
    <div class="resizable"></div> 
    <div class="resizable-x"></div> 
    </body> 
Cuestiones relacionadas