Anda di halaman 1dari 7

PARTE 2

GESTOS
Para empezar bien el curso, vamos a desarrollar nuestra primera aplicacin:
una app de gestos. Los gestos (en ingls gestures) son las interacciones
que el usuario hace con la pantalla tctil. Con esta app vamos a ver cmo
podemos detectar los gestos que hace el usuario y actuar en consecuencia.
Adems, aprenderemos cmo realizar algunas animaciones en nuestra app.
2.1 Gestos /
EVENTOS Y FAST-CLICK

Para empezar, vamos a crear una aplicacin muy sencilla con dos hemos creado un objeto que encapsula todas las funciones que
botones, que al hacer click (tap para dispositivos mviles) en ellos necesitamos y que invoca a su funcin principal, inicio. Esta
cambiarn el color de fondo de la pantalla de la app. Con esto funcin inicio hace varias cosas:
aprenderemos a distinguir el click del tap. Adems, veremos cmo
hacer ms responsiva (fluida) la interaccin con nuestra app. En primer lugar accede a elementos del HTML de la pgina
(en adelante lo llamaremos DOM - Document Object
Partimos de una plantilla web, con HTML, CSS y JavaScript. Con el Model) utilizando el mtodo d
ocument.querySelector
HTML para establecer la estructura de la app. En el CSS le daremos que recibe como parmetro un selector CSS. En este caso,
unos estilos. Y en el fichero JavaScript (JS) estableceremos el usamos los selectores para acceder por identificador (
comportamiento (behaviour en ingls) de nuestra app. Todos estn #identificadorDelElemento ) a los botones que hemos
incluidos en una carpeta www. creado en el HTML.

En el HTML tenemos simplemente dos botones. Adems, hemos A continuacin, sobre estas variables que tienen
enlazado un fichero CSS y otro JavaScript (a parte del fichero JS de referencias a los botones en el DOM, invocamos el mtodo
Apache Cordova). addEventListener (aadir un escuchador de eventos). Esto
indica qu evento vamos a escuchar sobre el elemento del
En el CSS le damos formato a los botones usando estilos. Adems, DOM, y cmo lo va a gestionar. Escuchamos el evento click
preparamos dos estilos que podemos aplicar al body de la pgina (primer parmetro) y lo gestionamos con una funcin (segundo
para ponerle un color de fondo oscuro o claro. parmetro, manejador de eventos) que se ejecutar al recibir un
evento de este tipo sobre el botn.
En el JavaScript est el comportamiento de la app. Para ello,
2.1 Gestos / EVENTOS Y FAST-CLICK

Finalmente tenemos las funciones manejadoras de los eventos Para utilizar Fast-click en nuestra app, tenemos que importar
click sobre los botones. Ambas acceden al body de la pgina y le la librera en el HTML. Adems, en el JavaScript escucharemos
aaden un estilo para ponerlo claro u oscuro. Para ello, utilizamos el evento DOMContentLoaded (contenido del DOM cargado)
el atributo className del b ody, que es la forma de referirse desde que nos indica que el dispositivo ya ha cargado y procesado
JavaScript al atributo class de HTML que tiene la informacin de completamente el HTML, CSS y JS de nuestra app. En este
estilo. momento (al iniciarse este evento) ya podemos arrancar Fast-
click y despus nuestra aplicacin. Podemos comprobar que la
En este primer ejemplo hemos usado el evento click. Pero en sensacin al usarla es que la app es mucho ms responsiva.
un terminal mvil lo natural es el tap (toque), no el click. Para
poder emular el click los navegadores de los terminales mviles
esperan 300ms (milisegundos) para ver si de verdad es un tap o
vas adesplazar el dedo para hacer cualquier otro gesto. Para evitar
este retardo usamos una librera llamada Fast-click1, que evita esa
espera y lanza inmediatamente el evento click. De esta forma, la
aplicacin es mucho ms responsiva.

(1) Descarga Fast-click


https://github.com/ftlabs/fastclick
2.2 Gestos /
DETECCIN DE EVENTOS CON HAMMER.JS

A continuacin vamos a aadir ms funcionalidad a nuestra app Pinch: con dos dedos, los separamos o juntamos para, por
de gestos. Aadimos una zona de gestos, de forma que los gestos ejemplo, hacer zoom-in y zoom-out.
que hagamos en esa parte de la pantalla vamos a detectarlos y
mostrar su nombre por pantalla. Vamos a explorar varios de los Rotate: con dos dedos, sirve para rotar algo es una u otra
gestos usados para interactuar con un dispositivo mvil: direccin

Tap: ya hemos visto que equivale a un toque. Para detectar los gestos usamos una librera JavaScript llamada
Hammer.js2. Para eso la cargamos desde nuestro HTML. Es
Double tap: toque doble. conveniente utilizar la versin minificada (min) de la librera
que es ms compacta (el tamao del archivo es menor) y tarda
Pan: sirve para mover algo en horizontal, mantenindolo menos en cargar, aunque es casi imposible leerla porque el cdigo
apretado. est ofuscado. Si slo vamos a utilizar la librera es muy til usarla
en este formato.
Swipe: similar a pan pero ms rpido se usa, por ejemplo, para
pasar una pgina. En el fichero JavaScript, hemos separado la lgica en 3 funciones
que siguiendo buenas prcticas son pequeas y con un nombre
Press: cuando pulsamos y mantenemos apretado. descriptivo de su comportamiento:

(2) Descarga Hammer.js


http://hammerjs.github.io
2.2 Gestos / DETECCIN DE EVENTOS CON HAMMER.JS

La primera,
iniciaBotones, lanza los escuchadores de eventos utilizar al reaccionar al evento, y que est detallada en la
sobre los botones. documentacin de Hammer.

La segunda,
inciaFastClick, arranca FastClick. Al probar la aplicacin en un dispositivo, nos damos cuenta de
que los eventos swipe y rotate no aparecen. Esto es porque
La tercera, iniciaHammer, pone a funcionar la librera Hammer y estn enmascarados por otros eventos que suceden antes, pan
es donde est todo el cdigo nuevo de la app. Al iniciar Hammer le enmascara a swipe y pinch a rotate. Por eso, Hammer te permite
decimos que acte sobre la zona de gestos que hemos Definido en elegir sobre qu zona de la pantalla van a funcionar determinados
el HTML. Para escuchar los eventos pinch y rotate le tenemos que eventos.
pasar una opcin especial. Para terminar, con el objeto de Hammer
escuchamos los eventos tctiles (tap, doubletap, pan, swipe,
press, pinch, rotate) y registramos una funcin escuchadora que se
ejecutar cuando suceda el evento.

La funcin escuchadora de todos estos eventos lo nico que


har ser pintar el nombre del evento que sucede (tomado del
parmetro event) en el elemento h1 del HTML que hemos
preparado para pintar esta informacin. El objeto evento3
de Hammer.js transporta mucha informacin que podremos

(3) Informacin del objeto evento en Hammer


http://hammerjs.github.io/api/#event-object
2.3 Gestos /
ANIMACIN
Ahora vamos a terminar nuestra app realizando animaciones sobre borramos las clases CSS de la zona de gestos.
la zona de gestos. Para realizar estas animaciones de forma nativa
utilizamos animaciones CSS que tienen la ventaja de ser ms Ahora pasamos a realizar animaciones ms complejas para el
eficiente que las que pudiramos hacer con JavaScript. swipe y el rotate. Para swipe seguimos usando keyframes pero
creamos una animacin para cada sentido del swipe: sobre la
En nuestro CSS vamos a aadir el cdigo para las animaciones. propiedad width (ancho) para el swipe a la izquierda o margin-
En primer lugar realizaremos las de doubletap y press. Para ello left (margen a la derecha) para el swipe a la derecha. Para el
especificamos los keyframes, es decir, los estados principales de evento rotate usamos una transformacin para que gire 360.
la animacin que indicamos envalor de %, siendo el 0% el inicio de
la animacin, el 50% la mitad y el 100% el final. Notad que en el En el JavaScript tenemos que escuchar los eventos swipe, y a
cdigo usamos el prefijo webkit en keyframes, y esto es debido travs de la informacin del objeto evento (propiedad direction)
a que estas animaciones an no son estndares entre todos los debemos aplicar la animacin a la swipe-right o a la swipe-left.
navegadores y queremos asegurarnos de implementarlas tanto en Para el caso del rotate, esperamos a que el usuario haya hecho un
navegadores tipo webkit como los de iOS y android. En ambos la desplazamiento significativo para lanzar la rotacin. Para controlar
propiedad CSS que modificamos es el color de fondo. que sea significativo, comprobamos que la propiedad distance
(distancia) del objeto evento sea mayor que un umbral. De esta
Para arrancar estas animaciones simplemente modificamos forma, la animacin no se ejecuta hasta que no llegamos a ese
el estilo de la zona de gestos aplicando una clase CSS con la umbral y queda mucho ms natural.
animacin. Es importante que quitemos esta clase CSS al terminar
la animacin porque si no slo podremos utilizarla una vez. Esto Con sto hemos terminado la exploracin de los gestos y las
lo hacemos escuchando el evento webkitAnimationEnd que se animaciones CSS.
lanza al terminar una animacin, y cuando lo detectamos ponemos

Anda mungkin juga menyukai