Có thể thêm ngăn chặn (giới hạn vào ranh giới của một phần tử khác) vào Dialog của giao diện người dùng jQuery không?Làm cách nào để đặt ngăn chặn trên Hộp thoại giao diện người dùng jQuery?
Trả lời
Bạn có thể nhắm mục tiêu hộp thoại và áp dụng ngăn chặn cho hộp thoại. Hãy thử điều này:
var container = $('.dialog-container'),
dialog = $('.ui-dialog');
// get container top left corner locations
var cx1 = container.offset().left,
cy1 = container.offset().top;
// get dialog size
var dw = dialog.outerWidth(),
dh = dialog.outerHeight();
// get container bottom right location, then subtract the dialog size
var cx2 = container.width() + cx1 - dw,
cy2 = container.height() + cy1 - dh;
dialog.draggable("option", "containment", [cx1, cy1, cx2, cy2]);
Chỉnh sửa: Tôi thiết lập a demo cho bạn.
Edit2: Thay đổi để sử dụng hộp thoại outerWidth & outerHeight
@ Mottie của đi đúng hướng, nhưng có một giải pháp đơn giản và tốt hơn:
var container = $('.dialog-container'),
dialog = $('.ui-dialog');
dialog.draggable("option", "containment", container);
Không giống như các giải pháp Mottie, điều này sẽ không phá vỡ nếu khung nhìn thay đổi kích thước. Tôi đã chia đôi JSFiddle here.
+1 Điều này hữu ích. Ngoài ra, đáng chú ý rằng 'container' không thực sự là phần tử cha của phần tử' dialog'. Nó có thể là bất kỳ yếu tố nào bạn muốn hạn chế chuyển động của hộp thoại. – Nikhil
@Nikhil: vâng, điều đó chắc chắn đáng nhắc đến. Cảm ơn bạn đã thêm điều đó! – Mac
Bạn cũng cần phải [đặt ngăn chặn cho tiện ích 'resizable'] (https://stackoverflow.com/a/44401699/616460), hoặc bạn vẫn có thể vượt qua giới hạn khi thay đổi kích thước. –
@ Mac đang đi đúng hướng, nhưng giải pháp chưa hoàn thành. Bạn phải cũng đặt ngăn chặn của tiện ích Resizable của hộp thoại. Nếu bạn chỉ thiết lập các Draggable, bạn sẽ nhận được ngăn chặn khi bạn kéo, nhưng khi bạn lấy các cạnh và thay đổi kích thước, bạn sẽ vẫn đi ra ngoài giới hạn. Vì vậy, bạn sẽ muốn thực hiện điều này, giả sử #mydialog
là phần tử bạn đã tạo hộp thoại ban đầu và #boundary
là phần tử bạn muốn hạn chế nó (nhân tiện, thông số vùng chứa cũng có thể là công cụ chọn) :
let ui = $('#mydialog').closest('.ui-dialog'); // get parent frame
ui.draggable('option', 'containment', '#boundary'); // <-- drag, but not resize
ui.resizable('option', 'containment', '#boundary'); // <-- don't forget!!!
Dưới đây là một đoạn mã ví dụ, chuyển các hộp kiểm để chuyển giam widget tương ứng của giữa 'document'
(mặc định), và '#area'
. Sau đó thử nghiệm cả bằng cách kéo hộp thoại bằng thanh tiêu đề, và thay đổi kích thước hộp thoại bằng các cạnh của nó. Lưu ý những gì sẽ xảy ra khi bạn chỉ chọn "Nhốt kéo":
// Create dialog from #win with mostly default options.
$('#win').dialog({
width: 200,
height: 150,
position: { my: 'center', at: 'center', of: '#area' }
});
// When checkbox changed, update confinement settings.
$('#draggable, #resizable').change(function() {
let d = $('#draggable').prop('checked');
let r = $('#resizable').prop('checked');
let ui = $('#win').closest('.ui-dialog');
ui.draggable('option', 'containment', d ? '#area' : 'document');
ui.resizable('option', 'containment', r ? '#area' : 'document');
});
#area {
position: relative;
left: 2ex;
top: 2ex;
width: 400px;
height: 300px;
border: 1px solid red;
}
#win {
font-size: 10pt;
display: flex;
flex-direction: column;
}
label {
display: flex;
align-items: center;
}
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
</head>
<body>
<div>Example</div>
<div id="area"></div>
<div id="win" title="test">
<label><input type="checkbox" id="draggable">Contain drag</label>
<label><input type="checkbox" id="resizable">Contain resize</label>
</div>
</body>
- 1. Hộp thoại Giao diện người dùng jQuery (Phương thức), ngăn chặn bất kỳ postback nào
- 2. Hộp thoại nút giao diện người dùng jQuery
- 3. Cách ngăn chặn nội dung Flash thông qua Hộp thoại Giao diện người dùng jQuery trong Firefox trên Windows
- 4. Hộp thoại giao diện người dùng jQuery - cách làm cho hộp thoại không đóng được?
- 5. Làm cách nào để ngăn việc cuộn lên đầu trang khi xuất hiện Hộp thoại Giao diện người dùng jQuery?
- 6. Hộp thoại giao diện người dùng jQuery + Xác thực
- 7. Giao diện người dùng JQuery thêm id vào hộp thoại
- 8. Giao diện người dùng jQuery Hộp thoại CSS cá nhân
- 9. Hộp thoại giao diện người dùng JQuery chậm
- 10. "Chính xác" hộp thoại/giao diện người dùng trên Windows
- 11. Đặt loại góc tròn trên Hộp thoại giao diện người dùng jQuery
- 12. Làm cách nào để đóng hộp thoại Giao diện người dùng jQuery sau một giây?
- 13. Làm cách nào để thay đổi màu nền của Hộp thoại Giao diện người dùng jQuery?
- 14. Hộp thoại giao diện người dùng jQuery: cách đóng hộp thoại khi nhấp vào bên ngoài?
- 15. Thanh cuộn cửa sổ chặn hộp thoại giao diện người dùng jQuery trong Google Chrome
- 16. Làm thế nào để cập nhật 'tiêu đề trong Hộp thoại Giao diện người dùng jQuery?
- 17. Hộp thoại giao diện người dùng JQuery - * Hộp thoại không phải chức năng * lỗi
- 18. Lớp phủ thoại giao diện người dùng jQuery
- 19. Hộp thoại giao diện người dùng jQuery đang đặt chiều rộng khung nội tuyến tự động
- 20. Giao diện người dùng jQuery DatePicker Mở trên cửa sổ hộp thoại Mở
- 21. Tại sao giao diện người dùng jQuery 1.10 xóa tùy chọn hộp thoại jquery zIndex?
- 22. Cách làm cho hộp thoại Giao diện người dùng jQuery không thể thay đổi kích thước
- 23. Định vị hộp thoại Giao diện người dùng jQuery: điều chỉnh vị trí trên cùng 20px -
- 24. Trong hộp thoại giao diện người dùng jquery, có thể đặt một hộp thoại phương thức lên trên một hộp thoại phương thức khác không
- 25. Làm cách nào để vô hiệu hóa thanh cuộn trong hộp thoại Giao diện người dùng jQuery?
- 26. Hộp thoại giao diện người dùng jQuery xung quanh iframe; vấn đề hiệu năng?
- 27. Hộp thoại giao diện người dùng jQuery Tự động đóng bằng cách sử dụng setTimeout
- 28. Cách thêm nhiều nút trong hộp thoại Giao diện người dùng Jquery?
- 29. Đặt id nút giao diện người dùng jQuery UI?
- 30. Cửa sổ Hộp thoại giao diện người dùng jQuery được tải trong phong cách AJAX Các tab giao diện người dùng jQuery
Bằng cách ngăn chặn bạn có nghĩa là ....? Tôi không rõ về những gì bạn đang ở đây, làm rõ một chút? –
Vâng, ý tôi là tôi muốn chỉ định khu vực có thể kéo hộp thoại. Bây giờ nó có thể được kéo trên tất cả các cửa sổ trình duyệt .. – PPPHP