|
|
Línea 479: |
Línea 479: |
| *Los touch events son distintos a los [http://api.jquery.com/category/events/mouse-events/ eventos tradicionales del ratón]: | | *Los touch events son distintos a los [http://api.jquery.com/category/events/mouse-events/ eventos tradicionales del ratón]: |
| *Tap | | *Tap |
− | *Taphold (duración aproximada 1s) | + | *Taphold (al menos 1s) |
| *Swipe (Swipeleft y Swiperight) | | *Swipe (Swipeleft y Swiperight) |
| + | |
| + | |
| + | <source lang="html4strict"> |
| + | <!DOCTYPE html> |
| + | <html> |
| + | <head> |
| + | <title>jQuery Mobile Touch Events Demo</title> |
| + | <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" /> |
| + | <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> |
| + | <script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script> |
| + | <script> |
| + | $(document).ready(function() { |
| + | $("#tap").on("tap", function() { |
| + | alert("TapEvent"); |
| + | }); |
| + | $("#taphold").on("taphold", function() { |
| + | alert("Tap Hold Event"); |
| + | }); |
| + | $("#swipe").on("swipe", function() { |
| + | alert("Swipe Event"); |
| + | }); |
| + | $("#swipeleft").on("swipeleft", function() { |
| + | alert("Swipe Left Event"); |
| + | }); |
| + | $("#swiperight").on("swiperight", function() { |
| + | alert("Swipe Right Event"); |
| + | }); |
| + | }); |
| + | </script> |
| + | </head> |
| + | <body> |
| + | <!--Main Page--> |
| + | <div data-role="page" id="main"> |
| + | <div data-role="header"> |
| + | <h1> |
| + | Touch Events |
| + | </h1> |
| + | </div> |
| + | <div data-role="content"> |
| + | <h1> |
| + | Touch Events example |
| + | </h1> |
| + | <p id="tap"> |
| + | Tap here |
| + | </p> |
| + | <p id="taphold"> |
| + | Tap and hold here |
| + | </p> |
| + | <p id="swipe"> |
| + | Swipe in this area. |
| + | </p> |
| + | <p id="swipeleft"> |
| + | Swipe Left <-- in this area. |
| + | </p> |
| + | <p id="swiperight"> |
| + | Swipe Right -- > in this area. |
| + | </p> |
| + | </div> |
| + | <div data-role="footer" class="ui-bar"> |
| + | <h1> |
| + | Footer |
| + | </h1> |
| + | </div> |
| + | </div> |
| + | <!-- First Page End --> |
| + | </body> |
| + | </html> |
| + | |
| + | </source> |
| | | |
| </div> | | </div> |
Revisión de 20:53 29 may 2013
|
Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos. Ver página de charlas.
|
|
PhoneGap
Tutorial para desarrollar aplicaciones móviles multiplataforma
Introducción
¿Qué es jQuery Mobile
- Framework para crear intefaces de usuario basadas en HTML5
- -Nos abstrae de las diferencias para el desarrollo entre los distintos navegadores.
- -Write less, do more (jQuery)
- -Diseño atractivo "out of the box": hacen diseñador al programador.
- Construido a partir de la librería jQuery y de jQueryUI
- Orientado especificamente para móviles
Diseños responsivo
- Uso de CSS media queries: hojas de estilo css especificas para dispositivos según anchura de pantalla, resolución o características.
- Grid fluido, especificando sus elementos mediante unidades relativas.
- Imágenes y media también en unidades relativas.
Diseño responsable
- Se utiliza el criterio "mobile first":
- Diseños sencillos
- Diseños más complejos mediante media queries y siempre con un min-width
- Se evita llevar un diseño pesado y aligerarlo para conseguir un time load aceptable para la red 3G.
- Imágenes específicas para el tamaño de pantalla de los móviles, tanto por ancho de banda como por tamaño de pantalla, ver ejemplo
- Uso de versiones minified y gzip
Ejemplo CSS Mobile First
- Las media queries en ems en vez de pixeles para asegurarnos que el layout se adaptará al cambio del tamaño de las fuentes, además de al ancho de pantalla.
- Para calcular la anchura en ems, se divide en ancho de nuestro objetivo entre 16px (tamaño de letra por defecto)
- Aplicaciones Web accesibles via navegador
/* Start with core styles outside of a media query that apply to mobile and up */
/* Global typography and design elements, stacked containers */
body { font-family: Helvetica, san-serif; }
H1 { color: green; }
a:link { color:purple; }
/* Stack the two content containers */
.main,
.sidebar { display:block; width:100%; }
/* First breakpoint at 576px */
/* Inherits mobile styles, but floats containers to make columns */
@media all and (min-width: 36em){
.main { float: left; width:60%; }
.sidebar { float: left; width:40%; }
}
/* Second breakpoint at 800px */
/* Adjusts column proportions, tweaks base H1 */
@media all and (min-width: 50em){
.main { width:70%; }
.sidebar { width:30%; }
/* You can also tweak any other styles in a breakpoint */
H1 { color: blue; font-size:1.2em }
}
Aplicación Web con jQueryMobile
Ficheros y documentación
- Visitar página jQueryMobile para su descarga.
- Leer el tutorial que incluye.
- Utilizaremos un CDN:
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" />
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>
Plantilla
<!DOCTYPE HTML>
<html>
<head>
<meta charset='utf-8'>
<title></title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" />
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>
</head>
<body>
<!-- Página-->
<div data-role="page">
<!--Aquí iría nuestra página jQuery Mobile -->
</div>
<!-- Fin página -->
</body>
</html>
Atributo data-role
- Utilizaremos el atributo data-role para definir las distintas partes de nuestra aplicación o sitio web.
- Mira el siguiente código y analiza su comportamiento:
<!DOCTYPE HTML>
<html>
<head>
<meta charset='utf-8'>
<title>Primera Web con jQuery Mobile</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" />
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>
</head>
<body>
<!-- Página-->
<div data-role="page">
<!-- Cabecera -->
<div data-role="header">
<h1>Título de la página</h1>
</div>
<!-- Body -->
<div data-role="content">
<p>El contenido de la página va aquí.</p>
</div>
<!-- Pie página -->
<div data-role="footer">
<h4> Contenido en el pie de la página</h4>
</div>
</div>
<!-- Fin página -->
</body>
</html>
Estructura aplicación
- Una aplicación tiene varias páginas y cajas de diálogo.
- Mediante jQuery Mobile se definirán todas en la misma página html.
- Cada página se puede abrir mediante un botón, que definirá su comportamiento mediante los atributos data-rel y data-transition:
<a data-role="button" href="#dialog1" data-rel="dialog" data-transition="pop">
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery Mobile Demo</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" />
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>
</head>
<body>
<!-- Página 1-->
<div data-role="page" id="main">
<div data-role="header">
<h1>
Página 1
</h1>
</div>
<div data-role="content">
<h1>
Ejemplo de páginas con jQueryMobile
</h1>
<a data-role="button" href="#page2">Ver página 2</a>
<a data-role="button" href="#dialog1" data-rel="dialog" data-transition="pop">Ver página 3</a>
</div>
<div data-role="footer">
<h4>
Pie de página 1
</h4>
</div>
</div>
<!-- Fin página 1 -->
<!-- Página 2-->
<div data-role="page" id="page2" data-add-back-btn=”true”>
<div data-role="header">
<h1>
Segunda página
</h1>
</div>
<div data-role="content">
<h1>
Contenido de la segunda página
</h1>
</div>
<div data-role="footer">
<h4>
Pie de página 2
</h4>
</div>
</div>
<!-- Fin página 2 -->
<!-- Página 3 -->
<div data-role="page" id="dialog1">
<div data-role="header">
<h1>
Tercera página
</h1>
</div>
<div data-role="content">
<h1>
Está página se abre como modal debido al atributo data-rel del botón.
</h1>
</div>
<div data-role="footer">
<h4>
Pie de la ventana modal
</h4>
</div>
</div>
<!-- Fin página 3 -->
</body>
</html>
Formularios
- Los toolbars en header y footer se crean simplemente añadiendo botones
- Los botones son enlaces con los atributos data-role="button" y data-icon="delete"
- El class="ui-bar" en el footer ha servido para añadir padding (ver api de jQueryMobile).
- Los elementos del formulario son los habituales elementos HTML para formularios.
- Cada elemento y su label se agrupan en un data-role="fieldcontain"
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Formulario</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" />
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>
</head>
<body>
<!-- Página 1-->
<div data-role="page" id="main">
<div data-role="header">
<a href="index.html" data-icon="delete">Cancelar</a>
<h1>
Editar contacto
</h1>
<a href="index.html" data-icon="check">Guardar</a>
</div>
<div data-role="content">
<form action="#" method="get">
<h2>
Formulario básico
</h2>
<div data-role="fieldcontain">
<label for="name">
Nombre:
</label>
<input type="text" name="name" id="name" value="" />
</div>
<div data-role="fieldcontain">
<label for="textarea">
Descripción:
</label>
<textarea cols="40" rows="8" name="textarea" id="textarea">
</textarea>
</div>
<div data-role="fieldcontain">
<label for="search">
Buscar:
</label>
<input type="search" name="search" id="search" value="" />
</div>
</form>
</div>
<div data-role="footer" class="ui-bar">
<a href="index.html" data-role="button" data-icon="delete">Quitar</a>
<a href="index.html" data-role="button" data-icon="plus">Añadir</a>
<a href="index.html" data-role="button" data-icon="arrow-u">Anterior</a>
<a href="index.html" data-role="button" data-icon="arrow-d">Siguiente</a>
</div>
</div>
<!-- Fin página 1 -->
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery Mobile Demo</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" />
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>
</head>
<body>
<!-- Main Page-->
<div data-role="page" id="main">
<div data-role="header">
<a href="index.html" data-icon="delete">Cancelar</a>
<h1>
Pedir pizza
</h1>
<a href="index.html" data-icon="check">Guardar</a>
</div>
<div data-role="content">
<form action="#" method="get">
<h2>
Formulario para pedir una pizza:
</h2>
<div data-role="fieldcontain">
<fieldset data-role="controlgroup">
<legend>
Escoje la base:
</legend>
<input type="radio" name="radio-choice-1" id="radio-choice-1" value="choice-1" checked="checked" />
<label for="radio-choice-1">
Fina y crujiente
</label>
<input type="radio" name="radio-choice-1" id="radio-choice-2" value="choice-2" />
<label for="radio-choice-2">
Queso gratinado
</label>
<input type="radio" name="radio-choice-1" id="radio-choice-3" value="choice-3" />
<label for="radio-choice-3">
Gorda y esponjosa
</label>
</fieldset>
</div>
<div data-role="fieldcontain">
<fieldset data-role="controlgroup">
<legend>
Elige los ingredientes de la pizza:
</legend>
<input type="checkbox" name="checkbox-1a" id="checkbox-1a" class="custom" />
<label for="checkbox-1a">
Champiñones
</label>
<input type="checkbox" name="checkbox-2a" id="checkbox-2a" class="custom" />
<label for="checkbox-2a">
Aceitunas negras
</label>
<input type="checkbox" name="checkbox-3a" id="checkbox-3a" class="custom" />
<label for="checkbox-3a">
Pimientos
</label>
<input type="checkbox" name="checkbox-4a" id="checkbox-4a" class="custom" />
<label for="checkbox-4a">
Cebolla
</label>
</fieldset>
</div>
<div data-role="fieldcontain">
<fieldset data-role="controlgroup" data-type="horizontal">
<legend>
Ingredientes para no vegetarianos:
</legend>
<input type="checkbox" name="checkbox-6" id="checkbox-6" class="custom" />
<label for="checkbox-6">
Chorizo
</label>
<input type="checkbox" name="checkbox-7" id="checkbox-7" class="custom" />
<label for="checkbox-7">
Jamón Serrano
</label>
<input type="checkbox" name="checkbox-8" id="checkbox-8" class="custom" />
<label for="checkbox-8">
Carne picada
</label>
</fieldset>
</div>
<div data-role="fieldcontain">
<fieldset data-role="controlgroup" data-type="horizontal">
<legend>
Forma de pago:
</legend>
<input type="radio" name="radio-choice-b" id="radio-choice-c" value="on" checked="checked" />
<label for="radio-choice-c">
Metálico
</label>
<input type="radio" name="radio-choice-b" id="radio-choice-d" value="off" />
<label for="radio-choice-d">
Cupón
</label>
<input type="radio" name="radio-choice-b" id="radio-choice-e" value="other"/>
<label for="radio-choice-e">
Tarjeta crédito
</label>
</fieldset>
</div>
</form>
</div>
<div data-role="footer" >
<p>Pizzeria CPIFP Los Enlaces </p>
</div>
</div>
</body>
</html>
Eventos en jQueryMobile
Sin jQuery Mobile
- Normalmente definimos los eventos mediante algún framework, por ejemplo jQuery.
- Evitamos el uso de javascript directamente debido a las diferencias entre navegadores.
- Mira el siguiente código y analiza su comportamiento:
<html>
<head>
<style>
p { color:red; margin:5px; cursor:pointer; }
p:hover { background:yellow; }
</style>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
<p>First Paragraph</p>
<p>Second Paragraph</p>
<p>Yet one more Paragraph</p>
<script>
$("p").click(function () {
$(this).slideUp();
});
</script>
</body>
</html>
Con jQuery Mobile
<!DOCTYPE html>
<html>
<head>
<title>jQuery Mobile Touch Events Demo</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" />
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script>
<script>
$(document).ready(function() {
$("#tap").on("tap", function() {
alert("TapEvent");
});
$("#taphold").on("taphold", function() {
alert("Tap Hold Event");
});
$("#swipe").on("swipe", function() {
alert("Swipe Event");
});
$("#swipeleft").on("swipeleft", function() {
alert("Swipe Left Event");
});
$("#swiperight").on("swiperight", function() {
alert("Swipe Right Event");
});
});
</script>
</head>
<body>
<!--Main Page-->
<div data-role="page" id="main">
<div data-role="header">
<h1>
Touch Events
</h1>
</div>
<div data-role="content">
<h1>
Touch Events example
</h1>
<p id="tap">
Tap here
</p>
<p id="taphold">
Tap and hold here
</p>
<p id="swipe">
Swipe in this area.
</p>
<p id="swipeleft">
Swipe Left <-- in this area.
</p>
<p id="swiperight">
Swipe Right -- > in this area.
</p>
</div>
<div data-role="footer" class="ui-bar">
<h1>
Footer
</h1>
</div>
</div>
<!-- First Page End -->
</body>
</html>