1. Code
  2. JavaScript
  3. jQuery

Crea una interfaz similar a Windows con jQuery UI

¿Alguna vez has querido crear una interfaz de usuario interactiva para tu aplicación, pero no sabías cómo hacerlo? En este tutorial, crearemos una interfaz similar a Windows de forma rápida y sencilla, al ponernos manos a la obra con jQuery UI, una biblioteca de interfaz de usuario construida sobre jQuery.
Scroll to top

Spanish (Español) translation by Luis Chiabrera (you can also view the original English article)

¿Alguna vez has querido crear una interfaz de usuario interactiva para tu aplicación, pero no sabías cómo hacerlo? En este tutorial, crearemos una interfaz similar a Windows de forma rápida y sencilla, al ponernos manos a la obra con jQuery UI, una biblioteca de interfaz de usuario construida sobre jQuery.


¿Qué es exactamente jQuery UI?

jQuery UI

jQuery UI proporciona abstracciones para interacción y animación de bajo nivel, efectos avanzados y widgets temáticos de alto nivel.

jQuery UI siempre ha sido una gran herramienta en el kit de cualquier desarrollador de front-end. Tiene muchos widgets y efectos diferentes que se han diseñado maravillosamente para que funcionen con la mayoría de los navegadores. ¿Quieres una forma rápida de crear una interfaz con pestañas? ¡jQuery UI los tiene! ¿Quieres crear un cuadro de diálogo modal? ¡También los tiene!

En este tutorial, aprenderemos cómo utilizar jQuery UI para crear una interfaz de usuario altamente funcional sin usar nada más. Al final, deberías estar familiarizado con la interfaz de usuario de jQuery, algunos de sus componentes y la comprensión básica de la personalización de la interfaz de usuario de jQuery. En última instancia, crearemos una interfaz de usuario similar a Windows, con cuadros de diálogo que se pueden arrastrar, cambiar de tamaño, minimizar y maximizar.

Nota: Si realmente deseas personalizar todos los rincones del tema de la interfaz de usuario de jQuery, debes consultar este tutorial titulado "Una guía masiva para los widgets de la interfaz de usuario de jQuery de temas personalizados". Es un tutorial solo para Premium, pero te garantizo que vale la pena comprarlo.


Nuestro objetivo: crear cuadros de diálogo similares a ventanas que se puedan arrastrar, redimensionar, minimizar y maximizar, que podamos implementar para diferentes tipos de aplicaciones.

windows-like interface example from Aralista!windows-like interface example from Aralista!windows-like interface example from Aralista!¡Ejemplo de interfaz similar a Windows de Aralista!

Imagen cortesía de http://aralista.com


Paso 1: Configuración

Para comenzar, descarga la biblioteca jQuery UI de su sitio, http://jqueryui.com. Una vez que visites el sitio, verás múltiples opciones para "personalizar" tu descarga de jQuery UI.

The jQuery UI Download PageThe jQuery UI Download PageThe jQuery UI Download PageLa página de descarga de jQuery UI

Para los propósitos de nuestro tutorial, asegúrate de que todos los componentes estén seleccionados. Para el tema, selecciona el tema Flick. Verifica que también selecciones la versión 1.8.16, ya que la página de descarga de jQuery UI proporciona una versión heredada para versiones anteriores de jQuery.

La descarga de la interfaz de usuario de jQuery también debería venir con la versión 1.6.2 de la biblioteca jQuery. Si estás usando una versión más actual de jQuery, deberías usarla en su lugar. Esta es solo la versión mínima de jQuery que necesita jQuery UI.

Extrae la descarga en la carpeta pública de tu proyecto. La descarga sugiere una estructura para los recursos de tu sitio:

Suggested file-structure for your site resourcesSuggested file-structure for your site resourcesSuggested file-structure for your site resourcesEstructura de archivo sugerida para los recursos de tu sitio
  • una carpeta js para tus archivos JavaScript (jQuery UI y jQuery)
  • una carpeta css para tus archivos CSS (jQuery UI theme CSS)

Siéntete libre de cambiar esto para que se adapte a tus necesidades, aunque en mi experiencia, esta es una excelente manera de organizar los recursos de tu sitio.

Después de extraer tus archivos, crea un archivo index.html que contendrá el HTML de nuestra página. El contenido del archivo HTML debe ser el siguiente:

1
<!DOCTYPE html>
2
<html>
3
	<head>
4
               <meta charset="utf-8">
5
		<title>Creating a windows-like interface with jQuery UI</title>
6
		<!-- Load the jQuery UI CSS -->
7
		<link rel="stylesheet" href="css/flick/jquery-ui-1.8.16.custom.css" type="text/css" />
8
		
9
		<!-- Load jQuery first before jQuery UI! -->
10
		<script src="js/jquery-1.6.2.min.js"></script>
11
		<script src="js/jquery-ui-1.8.16.custom.min.js"></script>
12
	</head>
13
	<body>
14
	</body>
15
</html>

Paso 2: crea el HTML para nuestras ventanas Dialog

Ahora, comencemos creando el HTML para nuestras ventanas Dialog. De acuerdo con la página de documentación de Dialog en el sitio de jQuery UI, el HTML de un cuadro Dialog es simplemente un <div>. Cualquier otro HTML dentro de <div> se convierte en el contenido del cuadro de diálogo. Sabiendo eso, crea una ventana de cuadro Dialog simple y ábrela usando jQuery UI.

Copia el siguiente código en el <body> del archivo HTML:

1
<div id="dialog_window_1" class="dialog_window" title="This is our first dialog window">
2
	<p>Hello World!</p>
3
</div>

Luego, inicia el cuadro Dialog ejecutando este JavaScript. Copia el siguiente código dentro del <head>  del archivo HTML:

1
<script>
2
	$(document).ready(function() {
3
		$('#dialog_window_1').dialog();
4
	});
5
</script>

Una vez que actualices la página, deberías ver algo como esto:

Hello World!Hello World!Hello World!

Hola Mundo!

Se puede inicializar un cuadro Dialog simplemente llamando a la función $(element_id).dialog(). Y como puedes ver, nuestro contenido dentro del <div> se convertirá en contenido para el cuadro de diálogo.

Ahora, crea un formulario simple para crear nuevos cuadros Dialog dentro del Dialog Box. Reemplaza el código Hello World! dentro de nuestro cuadro Dialog inicial con lo siguiente:

1
<h3>Create a new <code>Dialog</code> Window</h3>
2
<table class="dialog_form">
3
	<tr>
4
		<th>window Title</th>
5
	</tr>
6
	<tr>
7
		<td><input type="text" id="new_window_title" /></td>
8
	</tr>
9
	<tr>
10
		<th>
11
			window Content
12
		</th>
13
	</tr>
14
	<tr>
15
		<td>
16
			<textarea id="new_window_content"></textarea>
17
		</td>
18
	</tr>
19
	<tr>
20
		<th>
21
			window Buttons
22
		</th>
23
	</tr>
24
	<tr>
25
		<td id="buttonlist">
26
			<input type="checkbox" id="alertbutton" /><label for="alertbutton">ALERT</label>
27
			<input type="checkbox" id="closebutton" /><label for="closebutton">CLOSE</label>
28
			<input type="checkbox" id="clonebutton" /><label for="clonebutton">CLONE</label>
29
		</td>
30
	</tr>
31
</table>

Cuando actualices la página, debería verse así:

Looks ugly :(Looks ugly :(Looks ugly :(

Se ve un poco feo en este momento, pero no te preocupes, agregaremos algunas personalizaciones a la ventana Dialog para que se vea mejor


Paso 3: Personalizar nuestras ventanas Dialog a través de opciones de Dialog y CSS

Nuestro cuadro Dialog actualmente no se ve muy bien, pero podremos personalizarlo proporcionando algunas opciones de inicialización para nuestro código de inicialización de Dialog y, por supuesto, algo de CSS.

Reemplacemos nuestro código de inicialización con lo siguiente:

1
$('#dialog_window_1').dialog({
2
	width: 'auto',
3
	height: 'auto'
4
});

Agreguemos también algo de CSS en el <head> de nuestro HTML:

1
<style>
2
.dialog_form th {
3
	text-align: left;
4
}
5
6
.dialog_form textarea, .dialog_form input[type=text] {
7
	width: 320px;
8
}
9
</style>
Much better!Much better!Much better!

¡Mucho mejor!

Analicemos algunas de las opciones que usamos en nuestro código de inicialización:

  • width - esta opción te permite establecer un ancho específico para tu cuadro Dialog. También puedes configurarlo en 'auto' para permitir que jQuery UI establezca el ancho dinámicamente
  • height - hace prácticamente lo mismo que la opción width, pero lo hace para la altura del cuadro Dialog en lugar de el ancho

Hay muchas más opciones para el cuadro Dialog, pero la mayoría se ocupa del comportamiento del cuadro Dialog. Veremos algunos de estos en los pasos posteriores del tutorial.

Ahora que tenemos un cuadro Dialog atractivo con un formulario dentro, ¡agreguemos algunos Buttons a nuestro cuadro Dialog para que haga algo!


Paso 4: agregar un Button para abrir nuestra ventana Dialog

Una de las mejores cosas de jQuery UI es su modularidad. Por ejemplo, el cuadro Dialog también utiliza otros componentes de la interfaz de usuario de jQuery, como Draggable, Resizable y, lo que es más importante, el componente Button.

Button example from jQuery UI's documentation

Ejemplo de botón de la documentación de jQuery UI

El componente Button nos permite crear botones con funciones personalizadas al hacer clic. Y al mismo tiempo, se corresponde con el tema que instalamos con jQuery UI, por lo que cambiar el tema también cambiará el aspecto del botón, manteniendo el diseño uniforme en todo el sitio.

Para empezar, crea un Button para abrir y cerrar nuestro cuadro Dialog. Agrega esto al <body> del HTML:

1
<button id="create_button">Create a new window</button>

E inicialízalo agregando esto a la función $(document).ready():

1
$('#create_button').button();
Cool button broCool button broCool button bro

Genial botón hermano

Como estamos haciendo cosas con botones, convierte nuestras checkboxes en botones también para que se vean mejor. El componente jQuery UI Button también te permite recrear un conjunto de casillas de verificación o botones de opción en un Buttonset. Para hacerlo, simplemente copia el siguiente código en el bloque de JavaScript:

1
$('#buttonlist').buttonset();

Ahora, actualiza la página para ver las nuevas casillas de verificación bonitas:

Cool checkboxes broCool checkboxes broCool checkboxes bro

Ahora que el cuadro Dialog y el Button se muestran bien, podemos cambiar su comportamiento para que el Button abra y cierre el Dialog. Para hacerlo, actualiza el bloque de JavaScript para que se vea así:

1
$(document).ready(function() {
2
	//initialize the button and add a click function to our button so that it"ll open the window
3
	$("#create_button").button().click(function() {
4
		var create_dialog = $("#dialog_window_1");
5
		var create_button = $(this);
6
		
7
		//if the window is already open, then close it and replace the label of the button
8
		if( create_dialog.dialog("isOpen") ) {
9
			create_button.button("option", "label", "Create a new window");
10
			create_dialog.dialog("close");
11
		} else {
12
			//otherwise, open the window and replace the label again
13
			create_button.button("option", "label", "Close window");
14
			create_dialog.dialog("open");
15
		}
16
	});
17
	
18
	//open our dialog window, but set autoOpen to false so it doesn"t automatically open when initialized
19
	$("#dialog_window_1").dialog({
20
		width: "auto",
21
		height: "auto",
22
		autoOpen : false
23
	});
24
	
25
	//initialize our buttonset so our checkboxes are changed
26
	$("#buttonlist").buttonset();
27
});

Repasemos el código línea por línea:

  • Hemos agregado una función de click a nuestro Button que abre el cuadro Dialog cada vez que hacemos clic en él.
  • Además, usamos el método $(dialog_id).dialog('isOpen'), que devuelve true si nuestro Dialog ya está abierto y false si no.
  • Si Dialog está cerrado, abrimos la ventana Dialog llamando al método $(dialog_id).dialog('open'), y cambiamos la label del Button a "Close window" usando el método $(button_id) .button ('option') .
  • Si ya está abierto, hacemos lo contrario usando el mismo método Option en Button y el método $(dialog_id).dialog('close') para cerrar el cuadro Dialog.
  • También hemos aprovechado otra opción de Dialog, que se llama autoOpen. Cuando se establece en verdadero, permite que la ventana Dialog se abra automáticamente cuando se inicializa. De lo contrario, la ventana Dialog solo se puede abrir llamando al método $(dialog_id).dialog('open'), que es lo que hace el botón.
Functional buttons and checkboxes broFunctional buttons and checkboxes broFunctional buttons and checkboxes bro

Botones funcionales y casillas de verificación hermano


Paso 5: agregar funcionalidad a nuestra ventana Dialog

Ahora que la ventana Dialog está en funcionamiento, agreguemos la funcionalidad para crear nuevas ventanas Dialog. En primer lugar, agrega algunos botones a nuestro Dialog. Afortunadamente, jQuery UI tiene la funcionalidad de agregar botones a cualquier cuadro Dialog y personalizar lo que hacen cuando se hace clic en ellos. Para hacerlo, modifica el código de inicialización agregando un parámetro buttons:

1
$('#dialog_window_1').dialog({
2
	width: 'auto',
3
	height: 'auto',
4
	autoOpen : false,
5
	buttons: [
6
		{
7
			text: 'Create',
8
			click: function() {
9
				alert('Yay, clicked the button!');
10
			}
11
		}
12
	]
13
});

Como puedes ver en el código de muestra, agregamos el botón "Create" simplemente agregando una opción buttons al código de inicialización. La opción button es una matriz de objetos JSON en el siguiente formato:

1
{
2
	text: 'Name of your button',
3
	click: function () {
4
		//Add stuff here to do when the button is clicked
5
	}
6
}

Para agregar más botones, simplemente puedes agregar más objetos JSON en el mismo formato a la matriz buttons. Cuando actualices la página, debería verse así:

Yay, clicked the button!Yay, clicked the button!Yay, clicked the button!

¡Yupi, hiciste clic en el botón!

Ahora agregaremos algunas funciones a nuestro botón. Elimina la linea alert('Yay, clicked the button!'); y reemplázala con lo siguiente:

1
//get the total number of existing dialog windows plus one (1)
2
var div_count = $('.dialog_window').length + 1;
3
4
//generate a unique id based on the total number
5
var div_id = 'dialog_window_' + div_count;
6
7
//get the title of the new window from our form, as well as the content
8
var div_title = $('#new_window_title').val();
9
var div_content = $('#new_window_content').val();
10
11
//generate a buttons array based on which ones of our checkboxes are checked
12
var buttons = new Array();
13
if( $('#alertbutton').is(':checked') ) {
14
	buttons.push({
15
		text: 'ALERT',
16
		click: function() {
17
			alert('ALERTING from Dialog Widnow: ' + div_title);
18
		}
19
	});
20
}
21
22
if( $('#closebutton').is(':checked') ) {
23
	buttons.push({
24
		text: 'CLOSE',
25
		click: function() {
26
			$('#' + div_id).dialog('close');
27
		}
28
	});
29
}
30
31
//append the dialog window HTML to the body
32
$('body').append('<div class="dialog_window" id="' + div_id + '">' + div_content + '</div>');
33
34
//initialize our new dialog
35
var dialog = $('#' + div_id).dialog({
36
	width: 'auto',
37
	height: 'auto',
38
	title : div_title,
39
	autoOpen : true,
40
	buttons: buttons
41
});

Aquí hay un paso a paso del código que acabamos de agregar arriba:

  • Primero, obtén el número total de ventanas Dialog en el sitio.
  • A partir de esto, genera una nueva id que se utilizará para la nueva ventana Dialog.
  • Obtén el window Title y los valores del window Content del formulario “Create a new Dialog window”.
  • Comprueba si las casillas de verificación ALERT y CLOSE están marcadas. Si es así, crea un objeto JSON, siguiendo el formato button de arriba, y empújalo en una matriz buttons.
  • Genera y agrega el HTML de la ventana Dialog dentro de la etiqueta <body> de la página
  • Por último, inicializa la nueva ventana Dialog utilizando el código de inicialización como el que se utilizó en la ventana Dialog original.

Juega con él y prueba diferentes combinaciones de botones. Aquí hay una captura de pantalla con todas las combinaciones posibles:

Lorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit amet

Lorem ipsum dolor sit amet

Ahora que podemos crear varias ventanas, ¡agreguemos algunas funciones de minimizar y maximizar!


Paso 6: Hacer que las ventanas Dialog sean "Minimizables" y "Maximizables"

Desafortunadamente, jQuery UI no tiene métodos integrados de minimizemaximize, pero podemos agregarlo fácilmente anulando algunas cosas en el proceso de inicialización del prototipo de jQuery UI Dialog. Esencialmente, vamos a agregar un código posterior a la inicialización que creará automáticamente un "estado minimizado", agregará un ícono de minimizar para las ventanas Dialog, así como una función que "maximiza" la ventana minimizada cuando el estado minimizado sea clickeado.

Comencemos agregando el CSS para diseñar los botones y el estado minimizado:

1
#dialog_window_minimized_container {
2
	position: fixed;
3
	bottom: 0px;
4
	left: 0px;
5
}
6
7
.dialog_window_minimized {
8
	float: left;
9
	padding: 5px 10px;
10
	font-size: 12px;
11
	cursor: pointer;
12
	margin-right: 2px;
13
	display: none;
14
}
15
16
.dialog_window_minimized .ui-icon {
17
	display: inline-block !important;
18
	position: relative;
19
	top: 3px;
20
	cursor: pointer;
21
}
22
23
.ui-dialog .ui-dialog-titlebar-minimize {
24
	height: 18px;
25
	width: 19px;
26
	padding: 1px;
27
	position: absolute;
28
	right: 23px;
29
	top: 9px;
30
}
31
32
.ui-dialog .ui-dialog-titlebar-minimize .ui-icon {
33
	display: block;
34
	margin: 1px;
35
}
36
37
.ui-dialog .ui-dialog-titlebar-minimize:hover, .ui-dialog .ui-dialog-titlebar-minimize:focus {
38
	padding: 0;
39
}

También necesitaremos agregar un contenedor de "estado minimizado", donde agregaremos todas las ventanas minimizadas. Agrega esto dentro de la etiqueta <body> :

1
<div id="dialog_window_minimized_container"></div>

Ahora, agrega este bloque de código JavaScript después del lugar donde se carga la biblioteca jQuery UI. Esto es importante ya que no funcionará si es antes de que se cargue la biblioteca.

1
<script>
2
var _init = $.ui.dialog.prototype._init;
3
$.ui.dialog.prototype._init = function() {
4
	//Run the original initialization code
5
	_init.apply(this, arguments);
6
	
7
	//set some variables for use later
8
	var dialog_element = this;
9
	var dialog_id = this.uiDialogTitlebar.next().attr('id');
10
	
11
	//append our minimize icon
12
	this.uiDialogTitlebar.append('<a href="#" id="' + dialog_id + 
13
	'-minbutton" class="ui-dialog-titlebar-minimize ui-corner-all">'+
14
	'<span class="ui-icon ui-icon-minusthick"></span></a>');
15
	
16
	//append our minimized state
17
	$('#dialog_window_minimized_container').append(
18
		'<div class="dialog_window_minimized ui-widget ui-state-default ui-corner-all" id="' + 
19
		dialog_id + '_minimized">' + this.uiDialogTitlebar.find('.ui-dialog-title').text() + 
20
		'<span class="ui-icon ui-icon-newwin"></div>');
21
	
22
	//create a hover event for the minimize button so that it looks good
23
	$('#' + dialog_id + '-minbutton').hover(function() {
24
		$(this).addClass('ui-state-hover');
25
	}, function() {
26
		$(this).removeClass('ui-state-hover');
27
	}).click(function() {
28
		//add a click event as well to do our "minimalization" of the window
29
		dialog_element.close();
30
		$('#' + dialog_id + '_minimized').show();
31
	});
32
	
33
	//create another click event that maximizes our minimized window
34
	$('#' + dialog_id + '_minimized').click(function() {
35
		$(this).hide();
36
		dialog_element.open();
37
	});
38
};
39
</script>

Esto es lo que hace este código:

  • Deja que el código de inicialización Dialog de la jQuery UI original se ejecute a través de _init.apply(this, arguments);
  • Utiliza Append para agregar el icono de minimizar a la barra de título del cuadro Dialog
  • Escribe Append para agregar el HTML de estado minimizado dentro del <div> #dialog_window_minimized_container
  • Escribe hover para agregar un evento de desplazamiento al ícono de minimizar para que obtenga la clase ui-state-hover cuando se pasa el mouse sobre él, lo que agregará el efecto de "cambio de color de fondo" que vemos.
  • Cree un evento de clic para él que cierre la ventana Dialog y muestre el estado minimizado
  • Finalmente, cree otro evento de clic para el estado minimizado que se oculta y vuelve a abrir la ventana Dialog.

¡Y ahora, nuestra interfaz similar a Windows está completa!

windows-like interface, hurrah!windows-like interface, hurrah!windows-like interface, hurrah!

interfaz similar a Windows, ¡hurra!


Conclusión

En este artículo, hemos demostrado lo fácil que es crear una interfaz de usuario hermosa y altamente funcional usando nada más que jQuery y jQuery UI. A estas alturas, ya deberías saber cómo:

  • Descargar y configurar la biblioteca jQuery UI para tu proyecto
  • Utilizar el componente Dialog, Button y Buttonset de jQuery UI.
  • Crear cuadros Dialog de forma estática y dinámica utilizando información de cualquier fuente
  • Crear dinámicamente diferentes Dialog Buttons con cada nuevo cuadro Dialog.
  • Agregar funcionalidad personalizada al Dialog de la jQuery UI, p. Ej. función de minimizar y maximizar.
  • Personalizar el proceso de inicialización de jQuery UI

Vale la pena tomar nota de que hay muchos más componentes que puedes aprovechar a través de jQuery UI. Definitivamente es una excelente manera de crear interfaces de usuario increíbles de forma rápida y sencilla. Con suerte, este artículo te ha demostrado que jQuery UI es una herramienta esencial en el conjunto de herramientas de cualquier desarrollador.

¿Has usado jQuery UI en el pasado o planeas usarlo para un proyecto futuro? ¡Háznos saber en los comentarios a continuación y muchas gracias por leer!