Actualización: Parece que las partes internas de jQuery UI han cambiado drásticamente desde que contesté esto y el lanzamiento del evento ya no funciona.
Ya no hay forma directa de iniciar el evento porque el complemento redimensionable se ha modificado fundamentalmente. It resizes as the mouse is dragged rather than syncing items up at the end. Esto sucede al escuchar el evento de propagación interno resize
para los complementos redimensionables que is now fired by the _mouseDrag
handler. Pero depende de las variables establecidas en el camino, por lo que solo dispararlo, incluso internamente, no ayudará.
Esto significa que incluso anulando es desordenado en el mejor de los casos. Recomiendo simplemente redimensionar manualmente los elementos alsoResize
directamente, independientemente del widget UI si eso es posible.
Pero por diversión digamos que no lo es. El problema es que las partes internas del complemento establecen varias propiedades relacionadas con la posición del mouse anterior y actual para saber cuánto se debe cambiar el tamaño. Podemos abuso uso que para añadir un método para el widget, así:
$.widget("ui.resizable", $.ui.resizable, {
resizeTo: function(newSize) {
var start = new $.Event("mousedown", { pageX: 0, pageY: 0 });
this._mouseStart(start);
this.axis = 'se';
var end = new $.Event("mouseup", {
pageX: newSize.width - this.originalSize.width,
pageY: newSize.height - this.originalSize.height
});
this._mouseDrag(end);
this._mouseStop(end);
}
});
esto es sólo la creación de los eventos de ratón que el widget resizable
está buscando y que encienden los. Si quería hacer algo como resizeBy
que sería un fin aún más simple ya que todo lo que importa es el delta:
var end = $.Event("mouseup", { pageX: newSize.width, pageY: newSize.height });
que se podría llamar el método $.widget()
después de jQuery UI y antes de crear instancias y que .resizable()
Todos tendrán un método resizeTo
. Esa parte no cambia, es simplemente:
$(".selector").resizable({ alsoResize: ".other-selector" });
A continuación, cambiar el tamaño, que se dice que el nuevo método resizeTo
así:
$(".selector").resizable("resizeTo", { height: 100, width: 200 });
Esto actuaría como si al instante arrastrado a ese tamaño. Por supuesto, hay un par de trampas aquí:
- El eje
"se"
es suponiendo que desea cambiar el tamaño de la parte inferior derecha - Elegí este porque es, con mucho, el escenario más común, pero sólo podría hacerlo un parámetro.
- Estamos enganchando un poco a los eventos internos, pero estoy usando intencionalmente pocos detalles de implementación interna como sea posible, por lo que es menos probable que esto se rompa en el futuro.
- Podría romperse absolutamente en futuras versiones de jQuery UI, solo he intentado minimizar las posibilidades de eso.
You can play with it in action with a fiddle here y the resizeBy
version here.
Respuesta original:
Usted puede hacer esto:
$(".selector").trigger("resize");
alsoResize
aparejos internamente un manejador para el evento resize
, por lo que sólo tiene que invocar esa :)
Solución más obvia, tenía que estar cegado por la mente :) – JohnM2
No veo ningún parámetro de tamaño o distancia especificado allí, ¿puedo preguntar cómo lo hizo? –
wow un gran método para saber. también puede disparar cualquier otro tipo de evento, como "dialogresizestop". – alfred