Navegación con el teclado con Javascript

17

ago 2011

A la hora de realizar un tutorial, una de las pocas desventajas que encontraba en hacerlo en versión web respecto a realizarlo en pdf, era que en el pdf se podía pasar página con las flechas del teclado, lo cual que resulta muy útil cuando se está leyendo algo con formato libro o tutorial paso a paso, y no conocía la forma de tener la misma funcionalidad para navegar en la web.

En la versión web, la forma de pasar página que había creado consistía en el símbolo < para ir a la página anterior, y en el símbolo > para ir a la página siguiente. Ambas flechas se encontraban dentro de una lista de dos elementos.

Por ejemplo, en la página 2, para pasar a la página anterior y siguiente (páginas 1 y 3), el código HTML de la lista tendría este aspecto:

<ul>
    <li id="anterior"><a title="Anterior" href="paso-1.html">&lt;</a></li>
    <li id="siguiente"><a title="Siguiente" href="paso-3.html">&gt;</a></li>
</ul>

De esta forma se podía navegar atrás y adelante en el tutorial haciendo clic sobre los símbolos < (&lt;) y > (&gt;).

Para que también se pudiera avanzar y retroceder en el tutorial utilizando las flechas izquierda o derecha del teclado o las teclas de avance y retroceso de página, creé el script keyCode.js con una función, llamada getValueKey, que sería llamada desde el HTML cuando la página se hubiera cargado:

<html>
....
   <head>
        ....
        <script type="text/javascript" src="js/keyCode.js"></script>
    </head>
    <body onload="getValueKey()">
    ....
    </body>
</html>

Para no tener que escribir un script personalizado para cada página (el tutorial tenía más de 200 páginas), lo primero que hice en el script fue extraer dinámicamente la dirección a la que apuntaban las flechas de anterior y siguiente. Como los elementos de la lista tenían el identificador anterior y siguiente, y el href se encontraba dentro de cada elemento de la lista, la forma de extraer las direcciones a las que había que navegar las almacené en variables de esta forma:

var anterior=document.getElementById("anterior").firstChild.getAttribute("href");
var siguiente=document.getElementById("siguiente").lastChild.getAttribute("href");

Para extraer el código de la tecla pulsada y almacenarlo en una variable llamada code, utilicé el siguiente código:

document.onkeyup = KeyCheck;
if (element.captureEvents) element.captureEvents(Event.CLICK);       

function KeyCheck(e)
{
    if (!e) var e = window.event
    if (e.keyCode) code = e.keyCode;
    else if (e.which) code = e.which;
}

Por último, según la tecla pulsada (recogida en la variable code), la página saltaría a la que habíamos guardado en las variables anterior y siguiente. Para ello añadí el siguiente código dentro de la función KeyCheck:

switch(code)
{
    case 33:
    case 37:
        window.location.href = anterior;
        return false;
        break;
    case 34:
    case 39:
        window.location.href = siguiente;
        return false;
        break;
}

De esta forma voy a la página guardada en la variable anterior tanto si pulso en Re Pág (33) o la flecha izquierda (37), y voy a la página siguiente si pulso en Av Pág (34) o la flecha derecha (39).

Incluí una línea con return false para anular el código que el navegador pudiera tener por defecto para esa tecla, lo que puede resultar muy importante según las teclas que queramos detectar.

Para el caso de encontrarnos en la primera o última página del tutorial, podríamos crear como excepción dos scripts diferentes eliminando la referencia a la variable anterior o siguiente, y eliminando del switch los casos que correspondan.

Archivo Javascript completo: keyCode.js

Demo: Tutorial de Flash CS5 (navegable con el teclado)

Fuente consultada: Javascript – Introduction to Events

Lista de códigos: A list of keys and the JavaScript char codes they correspond to

StraightLines, mi primera aplicación de escritorio

13

jun 2011

He publicado la primera aplicación de escritorio que he creado con Adobe AIR. Se trata de StraightLines, una regla con la que, además de medir, podremos calcular proporciones y ángulos.

Alguna de las diferencias que he encontrado con otras reglas es que, además de medir de medir vertical y horizontalmente, permite medir líneas oblicuas. Además he añadido la posibilidad de calcular proporciones, informando también de si el valor se encuentra cerca de alguna de las proporciones más relevantes en diseño gráfico, como la proporción aúrea o √2 entre otras. Para las líneas oblícuas, también es posible saber el ángulo que forman.

Espero que estas funcionalidades añadidas puedan resultar de utilidad para los diseñadores gráficos. Los comentarios y sugerencias serán muy bienvenidos.

Página principal de la aplicación: StraightLines

StraightLines en el Intel AppUp: Intel AppUp – StraightLines

StraightLines en la Softpedia: Softpedia – StraightLines

Dynamic Layout Gallery

4

may 2011

Cuando empecé a crear esta nueva web decidí que las imágenes de la galería ocuparan una parte amplia del espacio disponible del navegador. También tenía la idea de que siempre aparecieran centradas y con la misma distancia entre ellas, y que si decidía cambiar el tamaño de las imágenes no tuviera que rehacer el css.

Por otro lado quería que la cabecera, el menú de navegación y el pie se alinearan correctamente con las imágenes que quedaran en los extremos. Más o menos algo como lo que puede verse en esta imagen:

Dynamic Layout Gallery

Supongo que hay formas sencillas de hacerlo, pero yo no lo conseguía. Así que para ello me creé un pequeño script que necesita de jQuery para funcionar (llamarlo plugin para jQuery quizá sea un poco excesivo).

Para que funcione simplemente tenemos que crear un div llamado gallery, que a su vez contenga para cada miniatura un div con la clase thumb, que puede contener la imagen, un pie de foto, o lo que nosotros queramos. El css asociado a cada thumb no forma parte del código, pero aspectos como el margin o el padding que se asignen en el css serán tenidos en cuenta automáticamente a la hora de calcular la anchura.

Una vez que tenemos la galería, asociamos la clase dynamicWidth a todo el contenido que queremos que tenga ese ancho variable, como lo puede ser la propia galería, la cabecera, el pie, o cualquier otro elemento.

Por último añadiremos a body, que también puede tener la clase dynamicWidth, la instrucción onLoad="setLayout();"

Por ejemplo, si tenemos los archivos Javascript necesarios en una carpeta llamada js, la parte HTML podría quedar así:

<html>
<head>
...
   <!--JS-->
   <script type="text/javascript" src="js/jquery-1.5.1.min.js"></script>
   <script type="text/javascript" src="js/dynamicLayoutGallery.js"></script>
...
</head>

<body class="dynamicWidth" onLoad="setLayout();">
    ...
    <div id="gallery">
        <div class="thumb">
            ...
        </div>
        ...
        <div class="thumb">
            ...
        </div>
    </div>
    ...
</body>
</html>

En el archivo Javascript podemos modificar fácilmente la separación que queremos que haya entre cada thumb, así como el número mínimo de imágenes que queremos que se vean en cada fila, incluso aunque el navegador sea de menor resolución. Esto puede ser útil por ejemplo en el caso de navegadores móviles, ya que mostrarán el número mínimo de imágenes que hayamos asignado, y así tenemos un mayor control sobre lo que se mostrará finalmente.

//horizontal separation between thumbnails (change it if you want)
var separation = "30px";

//minimum number of thumbnails in each row (change it if you want)
var minimNumThumbs = 3;

Este script está publicado bajo la licencia Creative Commons CC BY, así que podéis utilizarlo tanto para proyectos personales como comerciales. A continuación podéis encontrar todos los archivos necesarios para su uso.

Demo: Galería (www.ilovemedia.es)

Plugin: Dynamic Layout Gallery (archivo javascript)

jQuery: Página de descarga de jQuery

Publicación de la guía de Flash CS5

2

may 2011

Estreno este blog comentando que ya se puede acceder desde esta web la Guía de aprendizaje de Flash CS5. Esta guía, con más de 200 páginas, tiene numerosos vídeos e ilustraciones que facilitarán su aprendizaje incluso a los que nunca hayan trabajado con Flash.

Comenzaremos conociendo las herramientas de edición gráfica, para después adentrarnos en las diferentes herramientas de animación que ofrece Flash CS5, como por ejemplo el editor de movimiento, la animación de huesos y las herramientas 3D. También añadiremos sonido a nuestras animaciones.

Para añadir interactividad, nos introduciremos en la programación con ActionScript. Aprenderemos a controlar desde la reproducción de una animación, hasta el caso más complejo de la creación de un juego. También aprenderemos a utilizar componentes y conoceremos algunas de las posibilidades del trabajo con texto y vídeo.

Por último, conoceremos distintas formas de publicar el contenido que hayamos creado.

Espero que os resulte útil.