How to apply Javascript, JQuery Mobile framework, HTML5 and CSS3 to develop mobile applications that run on all platforms and resolutions. Slides from the Mobile Applications Development Diploma at Colombia
5. Introducción al desarrollo móvil
• Cada nuevo teléfono que aparezca tendrá un navegador.
• El uso de las web por dispositivos móviles pronto superará
al escritorio.
• La web es la única tecnología realmente multiplataforma.
• El desarrollo para móviles es un desarrollo bastante
complicado y exigente, pero ninguna otra tecnología
permite realmente alcanzar CUALQUIER plataforma.
11. Responsive Web Design
• Conjunto de técnicas desarrolladas por el diseñador web
Ethan Marcotte.
• Los sitios web diseñados utilizando estas técnicas adaptan
su layout al entorno.
• Principalmente reglas CSS.
• Dependiendo del valor de ciertas condiciones (tamaño,
orientación, etc…) el sitio se muestra de una forma u otra.
12. Técnicas RWD
• CSS3 Media Queries
• Evaluando algunas capacidades del navegador,
decidimos qué CSS aplicar.
• Layout fluidos
• Utilizando medidas CSS relativas en lugar de absolutas
• Images y medios fluidos.
• Las imágenes escalan para ocupar todo el espacio.
13.
14. Índice de contenidos
• Introducción al jQuery Mobile
• Primeros Pasos
• Componentes
• Transiciones
• Eventos
• Temas
15. jQuery Mobile
• Framework Web optimizado para dispositivos móviles.
• Construido sobre la librería jQuery.
• Utiliza HTML5, CSS3, JS y AJAX para renderizar páginas
con mínimo esfuerzo.
• Lleva el principio jQuery ‘write less, do more’ al siguiente
nivel, aplicando un diseño y funcionalidad atractiva y que
funciona exactamente igual en todos los navegadores.
• Construido buscando máxima accesibilidad, progressive
enhancement y RWD.
17. Introducción: Páginas
• Una página consiste en un
elemento HTML con atributo
data-role=“page”.
• Dentro de éste contenedor,
cualquier elemento HTML válido
es aceptado.
18. Introducción: Navegación AJAX
• Sistema de navegación AJAX.
• Ofrece soporte para añadir un botón Back.
• Intercepta cualquier enlace o formulario y lo convierte en AJAX.
• Mientras la petición espera, un spinner aparece en pantalla.
• Cuando la petición termina, inserta en el DOM el primer elemento de
tipo página que encuentre (data-role=‘page’). El resto es descartado.
• A continuación mejora todos los widgets de esa página para conseguir
el look & feel deseado.
• Finalmente la nueva página se hace visible mediante una transición.
• Anota el título para el elemento de navegación.
19. Introducción: Contenido y Widgets
• jQuery Mobile incluye una
buena variedad de widgets:
–Elementos de formulario
–Colapsables
–Popups
–Cuadros de diálogo
–Tablas
–Listas
–…
20. Introducción: Tematizando
• jQuery Mobile incluye un framework de tematizado que nos permitirá
cambiar el aspecto de los componentes nativos de forma sencilla.
• Swatches:
• Diferentes conjuntos de colores para toolbars, contenido y
botones.
• Cada tema puede contener hasta 26.
• jQuery Mobile ThemeRoller:
• Herramienta web para crear tus propios temas.
• http://themeroller.jquerymobile.com/
22. Enlazando el framework
Igual que con jQuery, enlazamos el framework desde un
CDN
<head>
…
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"
href="http://code.jquery.com/mobile/1.4.3/jquery.mobile-1.4.3.min.css">
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src=“http://code.jquery.com/mobile/1.4.3/jquery.mobile-1.4.3.min.js”>
</script>
…
</head>
23. Enlazando el framework: Ejercicio!
• Enlazar el framework jQuery Mobile al proyecto del simulador de
carreras.
• ¿Qué ha ocurrido con el botón de run? ¿Por qué?
24. Viewport
• Los navegadores móviles renderizan las páginas en una ventana virtual.
• Esta ventana es normalmente más ancha que la pantalla, así evita
estrechar y romper el aspecto de las páginas no diseñadas para
móviles.
• Safari Mobile introdujo el tag viewport para permitir a los
desarrolladores controlar el tamaño de esa ventana virtual.
• Viewport no es parte de ningún estándar, aunque la mayoría de los
navegadores móviles ya lo usan.
27. Páginas
• La página es la unidad fundamental en jQuery Mobile.
• Se utilizan para agrupar contenido y meterlo y sacarlo de la pantalla de
forma animada.
• Un documento HTML puede contener:
• Una página e ir añadiendo más al DOM bajo demanda utilizando
AJAX.
• Múltiples páginas e ir navegando entre ellas sin necesidad de hacer
más peticiones al servidor.
http://api.jquerymobile.com/page/
29. Páginas: Ejercicio!
Recubrir todo el contenido HTML de nuestro proyecto simulador de
carreras en una página jQuery Mobile con header y footer.
30. <div data-role=“page">
<div data-role="header">
<h1>Car racing simulator</h1>
</div>
<div role="main" class="ui-content">
....
</div>
<div data-role="footer">
<h4>Footer</h4>
</div>
</div>
Páginas: Ejercicio!
Recubrir todo el contenido HTML de nuestro proyecto simulador de
carreras en una página jQuery Mobile con header y footer.
34. Múltiples páginas: Ejercicio!
• Reestructurar el proyecto de forma que cada pantalla sea una página y
navegar de una a otra con alguno de los métodos vistos.
• Reescribir el código JS necesario para asumir este cambio.
• Eliminar el código innecesario. ¿Es necesaria la clase css hidden?
36. Cuadros de diálogo
<div data-role="page" data-dialog="true" id="pagetwo">
<div data-role="header">
<h1>I'm A Dialog Box!</h1>
</div>
<div data-role="main" class="ui-content">
<p>The dialog box…</p>
<a href="#pageone">Go to Page One</a>
</div>
<div data-role="footer">
<h1>Footer Text In Dialog</h1>
</div>
</div>
http://api.jquerymobile.com/dialog/
37. Cuadros de diálogo: Ejercicio!
Queremos que la página que indica cuál fue el coche ganador se muestre
como un cuadro de diálogo con un botón para cerrarlo y pasar a la
siguiente pantalla.
38. Cuadros de diálogo: Ejercicio!
Queremos que la página que indica cuál fue el coche ganador se muestre
como un cuadro de diálogo con un botón para cerrarlo y pasar a la
siguiente pantalla.
<div data-role="page" data-dialog="true" id="race_results">
<div data-role="header">
<h1>Results</h1>
</div>
<div role="main" class="ui-content">
<p></p>
<button>Close</button>
</div>
<div data-role="footer">
<h4>Footer</h4>
</div>
</div>
$('#race_config button').click(function() {
$.mobile.changePage($("#race"));
race.start();
});
$('#race_results button').click(function() {
$.mobile.changePage($("#ranking"));
});
39. Listas
jQuery Mobile incluye también una forma sencilla de incluir listas
integradas en nuestras aplicaciones.
<ol data-role=“listview”>
. . .
</ol>
http://api.jquerymobile.com/listview/
44. Transiciones: Ejercicio!
Probar todas las diferentes transiciones y añadir una transición adecuada
para mostrar cada página.
• Fade (por defecto)
• Flip
• Flow
• Pop
• Slide
• Slidefade
• Slideup
• Slidedown
• Turn
• None
45. Eventos
Eventos jQuery +
• Eventos de toque
• Eventos de scroll
• Eventos de cambio de orientación
• Eventos de página
http://api.jquerymobile.com/category/events/
51. Eventos de página: Ejercicio!
Queremos que la carrera comience exactamente cuando la página
correspondiente ya esté visible en pantalla, no antes como ocurre ahora.
52. Eventos de página: Ejercicio!
Queremos que la carrera comience exactamente cuando la página
correspondiente ya esté visible en pantalla, no antes como ocurre ahora.
<script>
var race;
$(document).ready(function() {
});
$(document).on('pageshow', '#race', function() {
race.start();
});
</script>
53. Tablas
jQuery Mobile proporciona dos
tipos de tablas.
• Reflow: Intenta colocar la tabla en horizontal,
pero si no cabe entonces lo hará en vertical
<table data-role=“table” class=“ui-responsive”>
54. Tablas
• Mostrando/Ocultando columnas: Oculta las
columnas que no caben y muestra un botón
para que el usuario seleccione cuáles quiere
mostrar/ocultar.
<table data-role=“table” data-mode="columntoggle" class=“ui-responsive”>
55. Contenido dinámico. Widgets.
• jQuery Mobile aplica estilos y formato en el momento de cargar la
página, pero ¿Qué pasa con el contenido que añadimos dinámicamente
después de ese momento?
• Debemos indicar al framework que estamos añadiendo contenido y por
lo tanto debe aplicarle los estilos, transiciones etc…
// Creación…
$(‘#new_page’).page();
$(‘#new_a’).button();
// Actualización…
$(‘#checkbox’).val(‘true’).checkboxradio(‘refresh’);
$(‘#mytable’).table(‘refresh’);
56. Tablas y contenido dinámico: Ejercicio!
• Queremos aplicar el estilo jQuery Mobile a la tabla con la carrera
de los coches.
• Tener en cuenta que esta tabla se rellena dinámicamente.
• ¿Qué ocurre cada vez que se modifica el contenido de la tabla?
57. Tablas y contenido dinámico: Ejercicio!
<table data-role="table" class="ui-responsive">
• Queremos aplicar el estilo jQuery Mobile a la tabla con la carrera
de los coches.
• Tener en cuenta que esta tabla se rellena dinámicamente.
• ¿Qué ocurre cada vez que se modifica el contenido de la tabla?
58. Tablas y contenido dinámico: Ejercicio!
<table data-role="table" class="ui-responsive">
• Queremos aplicar el estilo jQuery Mobile a la tabla con la carrera
de los coches.
• Tener en cuenta que esta tabla se rellena dinámicamente.
• ¿Qué ocurre cada vez que se modifica el contenido de la tabla?
Race.prototype = {
start: function() {
$('table').trigger('RACE_START');
$(‘table').table('refresh');
…
},
add_finished: function(car_num) {
$(‘table’).table(‘refresh');
…
}
};
59. Temas
jQuery Mobile proporciona dos temas diferentes por defecto
llamados “a” y “b”. Cada uno con diferentes colores, fuentes, barras,
etc…
<div data-role=“page” data-theme=“b”>