Cập nhật: Dường như nội bộ của giao diện người dùng jQuery đã thay đổi đáng kể kể từ khi tôi trả lời câu hỏi này và kích hoạt sự kiện không còn hoạt động nữa.
Không có cách nào trực tiếp để kích hoạt sự kiện nữa vì plugin thay đổi kích thước đã được thay đổi về cơ bản. It resizes as the mouse is dragged rather than syncing items up at the end. Điều này xảy ra bởi nó lắng nghe sự kiện tuyên truyền nội bộ resize
cho các plugin có thể thay đổi kích thước mà is now fired by the _mouseDrag
handler. Nhưng nó phụ thuộc vào các biến được thiết lập trên đường đi, do đó, chỉ cần bắn mà ngay cả trong nội bộ sẽ không giúp đỡ.
Điều này có nghĩa là thậm chí còn ghi đè nó là điều lộn xộn nhất. Tôi khuyên bạn chỉ nên thay đổi kích thước trực tiếp các thành phần alsoResize
một cách thủ công, hoàn toàn độc lập với tiện ích con giao diện người dùng nếu có thể.
Nhưng để cho vui, giả sử nó không phải. Vấn đề là phần bên trong của plugin thiết lập các thuộc tính khác nhau liên quan đến vị trí chuột trước đó và hiện tại để biết có bao nhiêu thay đổi kích thước. Chúng ta có thể lạm dụng sử dụng đó để thêm một phương pháp để widget, như thế này:
$.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);
}
});
Đây chỉ là tạo ra các sự kiện chuột mà widget resizable
đang tìm kiếm và bắn những. Nếu bạn muốn làm một cái gì đó giống như resizeBy
nó muốn được chấm dứt ngay cả đơn giản vì tất cả chúng ta quan tâm là đồng bằng:
var end = $.Event("mouseup", { pageX: newSize.width, pageY: newSize.height });
Bạn muốn gọi phương thức $.widget()
sau jQuery UI và trước khi tạo .resizable()
trường hợp của bạn và họ tất cả sẽ có phương thức resizeTo
. phần đó không thay đổi, nó chỉ là:
$(".selector").resizable({ alsoResize: ".other-selector" });
Sau đó, để thay đổi kích thước, bạn muốn gọi đó là phương pháp mới resizeTo
như thế này:
$(".selector").resizable("resizeTo", { height: 100, width: 200 });
này sẽ đóng vai trò như nếu bạn ngay lập tức kéo nó đến đó kích thước. Tất nhiên có một vài gotchas đây:
- Trục
"se"
là giả sử bạn muốn thay đổi kích thước của góc dưới bên phải - Tôi nhặt này bởi vì nó là bởi đến nay các kịch bản phổ biến nhất, nhưng bạn chỉ có thể làm cho nó một tham số.
- Chúng tôi đang tìm kiếm các sự kiện nội bộ một chút, nhưng tôi cố ý sử dụng ít chi tiết triển khai nội bộ nhất có thể để điều này ít có khả năng xảy ra trong tương lai.
- Nó hoàn toàn có thể phá vỡ trong các phiên bản tương lai của giao diện người dùng jQuery, tôi chỉ cố gắng giảm thiểu cơ hội đó.
You can play with it in action with a fiddle here và the resizeBy
version here.
câu trả lời gốc:
Bạn có thể làm điều này:
$(".selector").trigger("resize");
alsoResize
nội bộ giàn dựng một handler cho sự kiện resize
, vì vậy bạn chỉ cần gọi mà :)
Giải pháp rõ ràng nhất, tôi đã bị mù mắt :) – JohnM2
Tôi không thấy bất kỳ thông số kích thước hoặc khoảng cách được chỉ định ở đó, tôi có thể hỏi bạn đã làm như thế nào không? –
wow một phương pháp tuyệt vời để biết. bạn cũng có thể kích hoạt bất kỳ loại sự kiện nào khác, như "dialogresizestop". – alfred