¿Es posible agregar contención (que limita al límite de otro elemento) a jQuery UI's Dialog?¿Cómo configuro la contención en un cuadro de diálogo de jQuery UI?
Respuesta
Puede orientar el cuadro de diálogo y aplicarle una contención. Prueba esto:
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]);
Edición: He definido a demo para usted.
Edit2: Se ha cambiado el uso de diálogo outerWidth & outerHeight
@ Mottie de en el camino correcto, pero no hay una solución más sencilla y mejor:
var container = $('.dialog-container'),
dialog = $('.ui-dialog');
dialog.draggable("option", "containment", container);
A diferencia de la solución de Mottie, esto no se romperá si la ventana cambia de tamaño. He bifurcado el JSFiddle here.
+1 Esto fue útil. Además, vale la pena señalar que el 'contenedor' no necesita ser el padre del elemento' dialog'. Podría ser cualquier elemento al que desee restringir el movimiento del diálogo. – Nikhil
@Nikhil: sí, eso definitivamente vale la pena mencionar. Gracias por agregar eso! – Mac
También necesita [establecer la contención para el widget 'resizable'] (https://stackoverflow.com/a/44401699/616460), o aún podrá cruzar los límites cuando cambie el tamaño. –
@ Mac está en el camino correcto, pero la solución no está completa. Usted debe también establece la contención del widget Resizable del diálogo. Si solo configura el Arrastrable, obtendrá contención cuando arrastre, pero cuando agarre los bordes y cambie el tamaño, seguirá saliendo de los límites.
Por lo que usted quiere hacer esto, suponiendo #mydialog
es el elemento que creó inicialmente el diálogo desde y #boundary
es el elemento que se desea limitarlo a (por cierto, el parámetro contenedor puede ser también un selector) :
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!!!
He aquí un fragmento de ejemplo, alternar las casillas de verificación para cambiar el confinamiento del widget correspondiente entre 'document'
(por defecto), y '#area'
. Luego, experimente ambos arrastrando el diálogo por su barra de título, y, cambiándolo por sus bordes. Tenga en cuenta lo que sucede cuando sólo se selecciona "CONFINE arrastre":
// 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. Actualizar la posición del cuadro de diálogo jquery ui
- 2. Abrir el cuadro de diálogo de JQuery Ui en MousePosition
- 3. jQuery UI de diálogo Botones
- 4. Posición de diálogo jQuery UI
- 5. Cerrar el cuadro de diálogo de jQuery UI desde Iframe
- 6. El cuadro de diálogo modal JQuery UI usa 100% CPU
- 7. jQuery UI de diálogo lenta
- 8. JQuery UI Agregar Id. Al cuadro de diálogo
- 9. JQuery UI cuadro de diálogo - * No es una función * error
- 10. jQuery UI Diálogo + Validar
- 11. cuadro de diálogo jQuery
- 12. jquery UI autocompletar dentro de un cuadro de diálogo ui modal - ¿sugerencias que no se muestran?
- 13. jQuery Diálogo desplazarse al elemento en el cuadro de diálogo
- 14. jQuery UI diálogo modal no bloquea
- 15. jQuery ui pantalla completa diálogo
- 16. jQuery UI: Estilo de botón de diálogo
- 17. jQuery UI Diálogo/Pregunta de arrastre
- 18. pasar un valor en un cuadro de diálogo jQuery UI con una función
- 19. datepicker en JQuery UI El cuadro de diálogo muestra el calendario en el cuadro de diálogo abierto
- 20. Instancia de CKEditor en un cuadro de diálogo de jQuery
- 21. Establecer jQuery UI botón de diálogo id?
- 22. jquery-ui, de diálogo Uso ('abierto') y pasar una variable al cuadro de diálogo
- 23. ¿Cómo puedo desactivar un botón en un cuadro de diálogo de la interfaz de usuario jQuery?
- 24. jquery: Cómo eliminar completamente un cuadro de diálogo al cerrar
- 25. WPF: ¿Cómo configuro la ventana de propietario de un cuadro de diálogo que muestra un UserControl?
- 26. Crear un cuadro de diálogo JQuery Mobile
- 27. es posible pegar las pestañas jquery ui dentro de un diálogo de jquery ui
- 28. Cómo crear un cuadro de diálogo usando jquery-ui sin div HTML especificado
- 29. cómo mostrar un cuadro de diálogo en jQuery Mobile
- 30. ¿Cómo cambiar el tamaño del botón en el cuadro de diálogo de confirmación de Jquery Ui?
Por contención que quiere decir ....? No estoy seguro de lo que estás buscando aquí, aclara un poco? –
Bueno, quiero decir que quiero especificar el área donde se puede arrastrar el diálogo. Ahora se puede arrastrar por toda la ventana del navegador. – PPPHP