Обновление: похоже, что внутреннее устройство пользовательского интерфейса jQuery сильно изменилось с тех пор, как я ответил на этот вопрос, и запуск события больше не работает.
Больше нет прямого способа запустить событие, потому что плагин с изменяемым размером был коренным образом изменен. Изменяет размер при перетаскивании мыши вместо синхронизации элементов в конце. Это происходит путем прослушивания внутреннего события распространения resize
для подключаемых модулей с изменяемым размером, которые сейчас запускается обработчиком _mouseDrag
. Но это зависит от переменных, устанавливаемых по пути, поэтому просто запуск этого даже внутри не поможет.
Это означает, что даже переопределение в лучшем случае грязно. Я бы рекомендовал просто вручную изменить размер элементов alsoResize
напрямую, независимо от виджета пользовательского интерфейса, если это возможно.
Но ради забавы скажем, что это не так. Проблема в том, что внутренности плагина устанавливают различные свойства, относящиеся к предыдущей и текущей позиции мыши, чтобы знать, на сколько изменить размер. Мы можем злоупотреблять использовать это, чтобы добавить метод к виджету, например:
$.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);
}
});
Это просто создает события мыши, которые ищет виджет resizable
, и запускает их. Если бы вы хотели сделать что-то вроде resizeBy
, это был бы еще более простой конец, поскольку все, что нам нужно, это дельта:
var end = $.Event("mouseup", { pageX: newSize.width, pageY: newSize.height });
Вы бы вызвали метод $.widget()
после пользовательского интерфейса jQuery и перед созданием экземпляров .resizable()
, и все они будут иметь метод resizeTo
. Эта часть не меняется, просто:
$(".selector").resizable({ alsoResize: ".other-selector" });
Затем, чтобы изменить размер, вы должны вызвать этот новый метод resizeTo
следующим образом:
$(".selector").resizable("resizeTo", { height: 100, width: 200 });
Это будет действовать так, как если бы вы мгновенно перетащили его до этого размера. Здесь, конечно, есть несколько подводных камней:
- Ось
"se"
предполагает, что вы хотите изменить размер в правом нижнем углу — я выбрал это, потому что это, безусловно, самый распространенный сценарий, но вы можете просто сделать его параметром.
- Мы немного подключаемся к внутренним событиям, но я намеренно использую как можно меньше деталей внутренней реализации, чтобы с меньшей вероятностью сломаться в будущем.
- Это может полностью сломаться в будущих версиях пользовательского интерфейса jQuery, я только пытался свести к минимуму вероятность этого.
Вы можете поиграть с ним в действии со скрипкой здесь и версия resizeBy
здесь.
Исходный ответ:
Ты можешь это сделать:
$(".selector").trigger("resize");
alsoResize
внутренне настраивает обработчик события resize
, так что вам просто нужно вызвать его :)
person
Nick Craver
schedule
26.03.2010