Temario Curso HTML5
Temario Curso HTML5
Temario Curso HTML5
2 Etiquetas de HTML5
– Nuevas etiquetas, hojas de estilo, links en head, otras relaciones de links, etiquetas
obsoletas, estructura HTML5 …
3 Formularios web
– Nuevos campos, validación de cliente, atributo Type, estilos …
4 Propiedades de CSS3
– Novedades en CSS3, selectores, transiciones…
5 Canvas y dibujado
– Aplicaciones de uso, API de canvas, imágenes, gradientes, canvas en Internet Explorer …
6 Audio y vídeo
– Contenedores de vídeo, codecs de vídeo, codecs de audio, video en HTML5, alternativas
con HTML5+JS, etiqueta …
8 Web Sockets
– Motivación, introducción, ventajas, cómo usar WebSockets …
9 Geolocalización
– Introducción, API de geolocalización, soporte, uso de geolocalización, manejo de errores,
opciones de uso …
10 Web Workers
– Introducción a los Web Workers, uso de Web Workers, APIs de comunicación,
manejando errores, soporte de navegadores, nuestro primer worker, uso del worker en
segundo plano, introducción a los workers compartidos …
11 WebGL
– Introducción a WebGL, preparado para renderizar en 3D, contexto WebGL, añadiendo
2D e iluminación …
12 Sprites CSS
– Ventajas, preparando CSS Sprite, ¿cómo funciona SpriteMe? …
13 jQuery Mobile
– Estructura, enlaces, diálogos, elementos, eventos …
Introducción a HTML5 y CSS3
Un cambio que ahora estamos viviendo es el nacimiendo de HTML5, una nueva revisión del
estandard que mueve Internet y hace posble que ahora estemos interactuando (los usuarios que
leen la página).
El aumento de necesidades han dado lugar a la aparición de nuevos tags, el debate sobre el uso de
otros y cambios más o menos importantes pero que debemos conocer.
1. Sintaxis
El término HTML posee una sintaxis compatible con HTML4 y XHTML1 publicados en la red, pero
no compatible con las características más esotéricas del SGML de HTML4.
HTML5 define detalladas reglas de parse, incluyendo un control de errores, para que esta sintaxis
sea compatible con las implementaciones más populares. Los agentes de usuario seguirás las
mismas reglas que para los que actualmente tienen text/html.
El otro sintaxis que se puede utilizar para HTML5 es el llamado XHTML5, que no es más que una
sintaxis compatible con XML y documentos correctos en XHTML1. Los documentos servidos con
esta sintaxis deben ser servidos mediante el MIME application/xml.
2. Codificación de carácteres
Al igual que sus hermanos menores, seguiremos podiendo definir el charset de nuestro
documento mediante el tag <meta charset="UTF-8" > o la correspondiente versión de XML para
XHTML5.
2.2. El DOCTYPE
El nuevo HTML5 requiere el elemento DOCTYPE que debe ser declarado al proncipio de la página,
de esta forma nos aseguramos de que el navegador renderiza la página en modo estandard. En
cambio para la versión XHTML5 este elemento es opcional debido a que XML actua de diferente
manera dentro de nuestro navegador.
Permitido:
<div>
<em>…</em> //contenido inline
…
</div>
<div>
<p><em>…</em></p>
<p>…</p> //Contenido block
</div>
<div>
<em>…</em>
<p>…</p>
</div>
Otro cambio afecta al elemento <tfoot />, ahora podrá aparecer al final de la página, al igual que
directamente despues del elemento <thead />.
<table border="1">
<caption>Nombre de la tabla</caption>
<thead>
<tr>
<th scope="col">COLUMNA 1</th>
<th scope="col">COLUMNA 2</th>
</tr>
</thead>
<tbody>
<tr>
<td>DATOS 1</td>
<td>DATOS 2</td>
</tr>
<tr>
<td>DATOS 3</td>
<td>DATOS 4</td>
</tr>
</tbody>
<tfoot>
<tr>
<th scope="col">PIE 1</th>
<th scope="col">PIE 2</th>
</tr>
</tfoot>
</table>
Los tiempos modernos requieren nuevos elementos para proporcionar una web más semántica,
completa y homogénea. Para ello se han añadido una buena serie de elementos que nos
permitirán encapsular más nuestro contenido.
<article /> elemento que nos permite declarar un trozo del contenido como artículo. Ideal para
blogs o periódicos.
<aside /> representa un trozo de contenido que se relaciona muy levemente con el resto del
contenido.
<dialog /> elemento que permite representar conversaciones.
<dialog>
<dt> Costello
<dd> Look, you gotta first baseman?
<dt> Abbott
<dd> Certainly.
<dt> Costello
<dd> Who's playing first?
<dt> Abbott
<dd> That's right.
<dt> Costello
<dd> When you pay off the first baseman every month, who gets the money?
<dt> Abbott
<dd> Every dollar of it.
</dialog>
<figure /> podrás usarlo para asociar con un caption un contenido incrustado, como por
ejemplo gráficos o vídeo:
<figure>
<video src=ogg>…</video>
<legend>Example</legend>
</figure>
<footer /> parece que me han leido la mente o quizas leyeron este post. Sección de la página
para contener información sobre el autor, copyright, etc,…
<header /> representa a la sección de cabecera.
<nav /> representa la sección de la página orientada a la navegación.
<section /> elemento que indica que se trata de una sección genérica.
<audio /> y <video /> para el contenido multimedia.
<embed /> es un elemento dedicado para contenido de plugins.
<m /> representa el texto marcado.
<meter /> usado para representar medidas, por ejemplo el tamaño del disco usado…
<time /> usado para mostrar fechas y/o tiempo.
<canvas /> usado para mostrar gráficos renderizados en tiempo real, por ejemplo gráficos,
juegos, etc,…
<commnad /> relacionado con los comandos que el usuario puede invocar.
<datagrid /> ideal para mostrar un arbol de datos o una tabla tabulada.
<details /> muestra información adicionar si el usuario lo demanda.
<datalist /> junto con el nuevo atributo list para los <input /> puede ser usado para crear
comboboxes:
<input list=browsers>
<datalist id=browsers>
<option value="Safari">
<option value="Internet Explorer">
<option value="Opera">
<option value="Firefox">
</datalist>
<event-sources /> puede ser usado para capturar eventos enviados desde servidor.
<output /> nos indica que tipo de salida vamos producir con nuestra página.
<progress /> representa una barra de proceso de una tarea, por ejemplo descargar,…
Los elementos de entrada <input /> dispondrán de una serie de tipos (type) nuevos para indicar
los diferentes tipos de elementos de entrada posibles.
datetime
datetime-local
date
month
week
time
number
range
email
url
La idea es que estos tipos sean proporcionados por el agente de usuario (navegador) en su
interface que enviarán el formato definido al servidor.
Etiquetas de HTML5
Etiquetas semánticas de HTML5, como HEADER, ARTICLE, SECTION, ASIDE, FOOTER, NAV, FIGURE,
TIME, ...
Las etiquetas semánticas ayudan a definir la estructura del documento y permiten que las páginas
web sean mejor indexadas por los buscadores.
Una etiqueta se califica como semántica si tiene que ver el significado, es decir, si nos informa
sobre lo que trata su contenido. Por ejemplo, la etiqueta SECTION nos dice que contiene una
sección o capítulo dentro de la página. Frente a las etiquetas semánticas tenemos otros tipos de
etiquetas como las que afectan al formato, como UL, a multimedia, como VIDEO, etc.
Antes de la existencia de las etiquetas semánticas, el contenido se estructuraba con etiquetas DIV
que no aportaban ninguna información sobre el tema que trataban, salvo que se añadiese
aprovechando el valor dado a la propiedad ID, o a la propiedad CLASS para hacer referencia a su
contenido.
Las etiquetas a las que vamos a prestar más atención en este artículo son las que definen la
estructura general del sitio ( HEADER, ARTICLE, SECTION, ASIDE, FOOTER, NAV ) aunque también
existen otra nuevas etiquetas semánticas que señalan elementos concretos de la página como la
etiqueta FIGURE, para imágenes y gráficos, la etiqueta FIGCAPTION, que es un pie de imagen, la
etiqueta TIME para definir fechas y horas, también MAIN, MARK, SUMARY Y DETAILS.
Por ejemplo, el código siguiente produce el resultado que se ve a continuación utilizando las
etiquetas FIGURE y FIGCAPTION.
<figure>
</figure>
"Las fallas son las fiestas de la ciudad de Valencia (España). Una falla es un monumento de
madera, pintura y poliestireno que puede llegar a los 30 m. de atura, y que se quema el dia 19 de
Marzo."
- HEADER
Se utiliza como una introducción del elemento que la contiene. Si colocamos un HEADER en el
BODY, a primer nivel, será una introducción o presentación de toda la página. Si colocamos un
HEADER dentro de un SECTION, contendrá una introducción a esa sección. También se pueden
colocar dentro de un ARTICLE.
El HEADER suele llevar el título, la descripción corta y el logo de la página. El HEADER por si mismo
no separa contenidos, no se debe utilizar aislado, sino dentro de otra etiqueta semántica, o a
primer nivel en el BODY.
Es bastante frecuente utilizar las etiquetas H1, H2, ... para escribir los títulos dentro del
HEADER.html5 logo
- SECTION
Una SECTION agrupa contenido con un tema común, por ejemplo, las diferentes partes de un
periódico: política, sociedad, deportes, ...
Un sitio de cocina podría estar organizado en secciones. Una SECTION podría ser recetas de carne,
otra recetas de pescado y otra de verduras. Dentro de cada SECTION tendríamos un ARTICLE por
cada receta.
Cada SECTION puede estar encabezada por una etiqueta H1, H2,... dentro de una SECTION suelen
haber etiquetas ARTICLE, y también etiquetas DIV y P.
Una SECTION no debe ser usada con el único fin de dar formato, para eso se utiliza la etiqueta DIV.
- ARTICLE
Representa una unidad de contenido, es decir, contenido que responde a un tema concreto. El
ejemplo más claro es un artículo dentro de una revista, por ejemplo, en una página de cocina, un
ARTICLE sería cómo elaborar un determinado plato. En un foro, un ARTICLE sería un post, o
entrada en el foro.
Se pueden anidar un ARTICLE dentro de otro ARTICLE. Dentro de un ARTICLE el contenido se suele
estructurar con las etiquetas DIV y P. También está permitido poner dentro de un ARTICLE una
SECTION, siempre que el artículo sea largo y tenga diferentes secciones, pero lo más natural es
que el ARTICLE vaya dentro de una SECTION. Más adelante trataremos cómo crear estructuras de
páginas complejas, con tres niveles.
- NAV
Esta etiqueta está pensada para contener la barra de navegación o los enlaces a las páginas del
sitio web.
Normalmente va en la parte superior de la página o en un lateral. Suele estar formada por una
lista de enlaces con las etiquetas UL y LI. Aunque hay multitud de diseños diferentes de barras de
navegación y menús.
- ASIDE
Esta etiqueta está diseñada para contenido tangencial, es decir, menos importante que el cuerpo
de la página, y que suele ser de un tema relacionado indirectamente (o no relacionado) con el
tema principal. Se suele colocar en los laterales de la página. Pero no todo lo que va en los
laterales es ASIDE. Por ejemplo, si la página tiene publicidad en el lateral derecho, puede colocarse
en una etiqueta ASIDE, también una pequeña reseña sobre el autor podría ir en esta etiqueta.
- FOOTER
Normalmente va al final de la página y contiene información del tipo: autor, copyright, contacto,
mapa del sitio, etc. Se pueden poner HEADER y FOOTER dentro de SECTION y ARTICLE, aunque no
es lo más normal. No hay nada prohibido, pero debe tener cierta lógica o sentido semántico.
El uso de las etiquetas semánticas es bastante simple e intuitivo, según las características de cada
una que acabamos de ver. Realmente no existen normas fijas, cada diseñador puede darles el uso
que considere más apropiado. El único límite es el sentido común, no debemos perder de vista
que los buscadores las utilizarán para indexar la página, por lo tanto, nos interesa usar las
etiquetas semánticas con la lógica para la que fueron diseñadas.
Es importante aclarar que las etiquetas semánticas no añaden ningún formato. Es decir, por usar
NAV no se crea un menú, ni el HEADER tiene un tipo de letra más grande. El formato debemos
definirlo nosotros de la forma habitual, con CSS. La excepción es que muchos navegadores
incorporan la propiedad display: block a las etiquetas semánticas.
Veamos un ejemplo sencillo. Un sitio de cocina con dos secciones, artículos dentro de cada
sección, una cabecera, un pie y publicidad.
<header>
<nav>
</nav>
</header>
<section >
<h2>Recetas de carne</h2>
<article>
<h3>Conejo al ajillo</h3>
</article>
<article>
<h3>Cordero al horno</h3>
</article>
</section>
<section >
<h2>Recetas de pescado</h2>
<article>
<h3>Dorada a la sal</h3>
</article>
</section>
<aside>
<p>Publicidad</p>
</aside>
<footer>
<p>autor: Programaspyme</p>
</footer>
</body>
body {
font-family:Verdana,sans-serif;font-size:0.9em;
header {
margin:5px;margin-bottom:15px;padding:8px;
color:blue
footer {
font-style:italic;
font-size:0.8em;
section {
margin-left:25px;
font-style:italic
article {
margin-left:25px;
font-style:normal;
color:green;
aside {
background-color:#ddd;
nav ul {
margin:0;padding:0; background-color:#a44
nav ul li {
display:inline; margin:15px;
p{
color:black;
</style>
<article>
<h3>Conejo al ajillo</h3>
<div class="descripcion">
<p>Una de las formas más tradicionales de preparar el conejo es esta, con abundantes
ajos.</p>
<p><img src="../graficos/conejos-al-ajillo.jpg" alt="Conejo al ajillo" width="400"
height="218" align="right" /></p>
</div>
<div class="ingredientes">
<h4>Ingredientes:</h4>
<ul>
<li> 1 conejo</li>
<li> 1 cabeza ajos</li>
<li> 1 vaso vino blanco</li>
<li> aceite</li>
<li> sal</li>
</ul>
</div>
<div class="elaboracion">
<h4>Elaboracion:</h4>
<p class="elaboracion">Primero partimos el conejo en trozos pequeños y ponemos a
freírlos en una sartén con abundante aceite, a fuego lento. Le añadimos el vino y
esperamos a que se dore.</p>
</div>
</article>
Además de usar DIV para crear más niveles, también se pueden poner DIV utilizándolos para dar
formato y por lo tanto pueden abarcar SECTION, ARTICLE y HEADER. En nuestro último ejemplo,
hemos utilizado un DIV que contiene SECTION, ARTICLE y FOOTER, para poder colocar la
publicidad en una columna a la derecha en la etiqueta ASIDE.
<div id="columna_izquierda">
<section >
... resto contenido ...
</div>
ELEMENTOS DE FORMULARIO
HTML5 hace que el desarrollo de formularios sea mucho más sencillo. Se han añadido dos nuevos
métodos que pueden ser utilizados en la acción del formulario (update y delete), pero lo más
interesante son los nuevos tipos de input y elementos de formulario que mejoran la experiencia
del usuario y facilitan el desarrollo de los formularios. Estos nuevos elementos añaden en algunos
casos, validaciones propias de sus datos, por lo que ya no es necesario JavaScript para realizar este
proceso.
La especificación de HTML5 define 12 nuevos tipos de input que podemos utilizar en nuestros
formularios. Esta especificación no define cómo deben mostrarse los nuevos tipos en los
navegadores, ni los campos ni las validaciones. De hecho, y gracias a cómo está especificado
HTML, los navegadores que no comprendan los nuevos tipos de entrada, mostrarán un campo de
texto tradicional, por lo que la compatibilidad con navegadores antiguos está garantizada.
El nuevo tipo <input type="email"> indica al navegador que no debe permitir que se envíe el
formulario si el usuario no ha introducido una dirección de email válida, pero no comprueba si la
dirección existe o no, sólo si el formato es válido. Como ocurre con el resto de campos de entrada,
puede enviar este campo vacío a menos que se indique que es obligatorio.
El atributo multiple indica que el valor de este campo, puede ser una lista de emails válidos,
separados por comas.
El nuevo tipo <input type="url"> indica al navegador que no debe permitir que se envíe el
formulario si el usuario no ha introducido una URL correcta. Algunos navegadores ofrecen ayudas
al usuario, como Opera que añade el prefijo http:// a la URL si el usuario no lo ha introducido. Una
URL no tiene que ser necesariamente una dirección web, sino que es posible utilizar cualquier
formato de URI válido, como por ejemplo tel:555123456.
El nuevo tipo <input type="date"> es de los más esperados y útiles. En muchos de los sitios web es
normal disponer de campos específicos de fecha, donde el usuario debe especificar fechas (para
un concierto, vuelo, reserva de hotel, etc). Al existir tantos formatos de fecha diferentes (DD-MM-
YYYY o MM-DD-YYYY o YYYY-MM-DD), esto puede suponer un inconveniente para los
desarrolladores o los propios usuarios.
Este nuevo tipo de campo resuelve estos problemas, ya que es el navegador el que proporciona la
interfaz de usuario para el calendario, e independientemente del formato en el que se muestre,
los datos que se envían al servidor cumplen la norma ISO para el formato de fechas.
El nuevo tipo <input type="time"> permite introducir una hora en formato 24h, y validarlo. De
nuevo, es el navegador el encargado de mostrar la interfaz de usuario correspondiente: puede ser
un simple campo donde es posible introducir la hora y los minutos, o mostrar algo más complejo
como un reloj de agujas.
Este nuevo tipo de campo es la combinación de los tipos date y time, por lo que se valida tanto la
fecha como la hora introducida.
El nuevo tipo <input type="week"> permite la selección de una semana del año concreta. La
representación interna del mes es un valor entre 1 y 53, pero de nuevo queda en manos del
navegador la manera de mostrarlo al usuario. La representación interna de la semana 7, por
ejemplo, es la siguiente: 2013-W07.
El nuevo tipo <input type="range">, muestra un control deslizante en el navegador. Para conseguir
un elemento de este estilo, era necesario un gran esfuerzo para combinar imágenes, funcionalidad
y accesibilidad, siendo ahora mucho más sencillo. Este tipo de campo encaja de nuevo
perfectamente con los atributos min, max y step, que veremos más adelante.
El nuevo tipo <input type="tel">, espera que se proporcione un número de teléfono. No se realiza
ninguna validación, ni se obliga a que únicamente se proporcionen caracteres numéricos, ya que
un número de teléfono puede representarse de muchas maneras: +44 (0) 208 123 1234.
La gran ventaja de este campo es que en dispositivos con un teclado virtual, éste se adaptará para
mostrar únicamente los caracteres asociados on números de teléfono.
El nuevo tipo <input type="color">, permite seleccionar un color de una paleta de colores
mostrada por el navegador. Esta paleta de colores, coincide, por norma general, con la interfaz de
selección de colores del sistema operativo.
Al igual que los nuevos tipos de campo, el elemento input ha recibido nuevos atributos para
definir su comportamiento y restricciones: autocomplete, min, max, multiple, pattern, autofocus,
placeholder, required y step. Existe además un nuevo atributo, list, que hace referencia a otro
elemento, permitiendo crear un nuevo tipo de entrada de datos.
La combinación del atributo list y un elemento de tipo <datalist> da como resultado un campo de
texto, donde el usuario puede introducir cualquier contenido, y las opciones definidas en el
<datalist> se muestran como una lista desplegable. Hay que tener en cuenta que la lista tiene que
estar contenida en un elemento <datalist> cuyo id coincide con el indicado en el atributo list:
El atributo booleano autofocus permite definir que control va a tener el foco cuando la página se
haya cargado. Hasta ahora, esto se conseguía a través de JavaScript, utilizando el método .focus()
en un elemento concreto, al cargarse el documento. Ahora es el navegador el encargado de esta
tarea, y puede comportarse de manera más inteligente, como no cambiando el foco de un
elemento si el usuario ya se encuentra escribiendo en otro campo (éste era un problema común
con JavaScript).
Únicamente debe existir un elemento con este atributo definido en el documento. Desde el punto
de vista de la usabilidad, hay que utilizar este atributo con cuidado. Hay que utilizarlo únicamente
cuando el control que recibe el foco es el elemento principal de la página, como en un buscador,
por ejemplo.
Una pequeña mejora en la usabilidad de los formularios, suele ser colocar un pequeño texto de
ayuda en algunos campos, de manera discreta y que desaparece cuando el usuario introduce algún
dato. Como con el resto de elementos, hasta ahora era necesario utilizar JavaScript para realizar
esta tarea, pero el atributo placeholder resuelve esta tarea.
Es importante recordar que este atributo no sustituye a la etiqueta <label>.
Este atributo puede ser utilizado en un <textarea> y en la gran mayoría de los elementos <input>
(excepto en los de tipo hidden, image o botones como submit). Cuando este atributo está
presente, el navegador no permite el envío del formulario si el campo en concreto está vacío.
Este atributo permite definir que un campo puede admitir varios valores, como URLs o emails. Un
uso muy interesante de este atributo es utilizarlo en conjunto con el campo <input type="file">, ya
que de esta manera nos permite seleccionar varios ficheros que podemos enviar al servidor al
mismo tiempo.
Este atributo permite controlar el comportamiento del autocompletado en los campos de texto
del formulario (que por defecto está activado).
Como hemos visto en el campo <input type="number">, estos atributos restringen los valores que
pueden ser introducidos; no es posible enviar el formulario con un valor menor que min o un valor
mayor que max. También es posible utilizarlo en otro tipo de campos como date, para especificar
fechas mínimas o máximas.
El atributo step controla los pasos por los que un campo aumenta o disminuye su valor. Si un
usuario quiere introducir un porcentaje, pero queremos que sea en múltiplos de 5, lo haríamos de
la siguiente manera:
<input type="range" mix="0" max="100" step="5">
3.2.9 ATRIBUTO PATTERN
Algunos de los tipos de input que hemos visto anteriormente (email, number, url...), son
realmente expresiones regulares que el navegador evalúa cuando se introducen datos. El atributo
pattern nos permite definir una expresión regular que el valor del campo debe cumplir. Por
ejemplo, si el usuario debe introducir un número seguido de tres letras mayúsculas, podríamos
definir esta expresión regular:
Con HTML5, los elementos que hasta ahora era obligatorio que estuviesen contenidos dentro del
elemento <form>, pueden colocarse en cualquier lugar de la página, siempre que los relacionemos
con el formulario concreto a través del atributo form y el id de dicho formulario.
<form id="foo">
<input type="text">
...
</form>
<textarea form="foo"></textarea>
En este caso, el elemento <textarea> se encuentra fuera del formulario, pero realmente pertenece
a él ya que hemos definido el atributo form con el identificador del formulario.
Además de los nuevos tipos de input incluidos en la especificación, se han añadido nuevos
elementos de formulario, entre los que se incluyen los siguientes:
3.3.1 <PROGRESS>
max: define el trabajo total a realizar por la tarea, la duración de un vídeo... Su valor por defecto es
1.0.
value: el valor actual (en coma flotante) o estado del progreso. Su valor debe ser mayor o igual a
0.0 y menor o igual a 1.0 o el valor especificado en max.
position: atributo de sólo lectura que representa la posición actual del elemento <progress>. Este
valor es igual a value/max y -1 si no se puede determinar la posición.
Las unidades son arbitrarias, y no se especifican.
3.3.2 <METER>
El elemento <meter> es muy similar a <progress> (de hecho, se discute la necesidad de disponer
de dos elementos tan similares). Esta nueva etiqueta se usa para representar escalas de medidas
conocidas, como la longitud, masa, peso, uso de disco, entre otras. Define los siguientes atributos:
value: representa el valor actual. Si no se especifica, se toma como valor el primer número que
aparece en el contenido del elemento. Su valor por defecto es 0.
min: el mínimo valor permitido. El valor por defecto es 0.
max: el mayor valor permitido. Si no se especifica, su valor por defecto es 1, a menos que el valor
mínimo definido sea mayor que 1, en cuyo caso el valor de max será igual a min.
low: es considerado el límite inferior del rango de valores.
max: es considerado el límite superior del rango de valores.
optimum: representa el valor óptimo del elemento, y se encuentra entre min y max.
<p>Your score is:
<meter value="91" min="0" max="100"
low="40" high="90" optimum="100">A+</meter>
</p>
Nuevo elemento meter
Figura 3.18 Nuevo elemento meter
EJERCICIOS
18.1 CAPÍTULO 2
18.1.1 EJERCICIO 1
Dada la siguiente página web, estructurada en XHTML, aplicar las nuevas etiquetas
semánticas de HTML5 donde sea conveniente, manteniendo el mismo aspecto visual
(modificar la hoja de estilos si es necesario) y funcionalidad. Realizad también los
cambios necesarios en la cabecera del documento (elemento <head>).
18.2 CAPÍTULO 3
18.2.1 EJERCICIO 2
18.3 CAPÍTULO 4
18.3.1 EJERCICIO 3
18.4 CAPÍTULO 5
18.4.1 EJERCICIO 5
<ul>
</ul>
18.5 CAPÍTULO 6
18.5.1 EJERCICIO 6
Añadir una lista de reproducción que permita seleccionar un nuevo vídeo, y éste se
reproduzca sin recargar la página.
Figura 18.1 Aspecto final del reproductor
18.6 CAPÍTULO 7
18.6.1 EJERCICIO 7
18.7 CAPÍTULO 8
18.7.1 EJERCICIO 8
Disponer de una tabla para almacenar los tweets. Los campos mínimos son:
identificador del tweet, texto, usuario, y fecha de publicación.
Disponer de una tabla para almacenar los usuarios que publican los tweets. Esta
tabla debe estar relacionada con la anterior. Los campos mínimos son: identificador
del usuario, nombre e imagen.
Crear un método addTweet que dado un objeto que corresponde con un tweet, lo
almacene en la base de datos. Almacenar el usuario en caso de que no exista, o
relacionarlo con el tweet si existe.
Crear un método removeTweet que dado un identificador de tweet, lo elimine de la
base de datos. Éste método debe devolver el tweet eliminado.
Crear un método updateTweet que dado un objeto que corresponde con un tweet,
actualice los datos correspondientes al tweet en la base de datos.
Crear un método getTweets que dado un parámetro de fecha, me devuelva todos los
tweets posteriores a esa fecha. Cada tweet debe incluir sus datos completos y el
usuario que lo creó.
18.7.3 EJERCICIO 10
Crear un objeto que encapsule una base de datos IndexedDB, que nos permitar
acceder a una base de datos para añadir, modificar, eliminar y obtener registros. Dicha
base de datos va a almacenar una sencilla lista de tareas pendientes. Los requisitos
son los siguientes:
Cread una página HTML que muestre la hora local de vuestro ordenador, y la hora del
servidor de www.google.es. Los cálculos de hora local y obtención de hora del servidor,
deben crearse en ficheros separados. El comportamiento es el siguiente:
Todos los ficheros necesarios para realizar el ejercicio deben ser cacheados, a
excepción del javascript que solicita la petición al servidor.
Las peticiones de hora al servidor www.google.es se realizan a través de Ajax, en
intervalos de 1 segundo. Dichas peticiones no deben realizarse si no existe conexión.
En tal caso, se muestra un mensaje al usuario indicando que se ha perdido la
conexión.
Si se recarga la página, y no existe conexión, utilizar un fallback para la obtención
de la hora del servidor, que muestre un mensaje al usuario indicando que se ha
perdido la conexión.
xmlHttp.open('HEAD',url,false);
xmlHttp.setRequestHeader("Content-Type", "text/html");
xmlHttp.send(null);
return xmlHttp.getResponseHeader("Date");
var st = srvTime("https://www.google.es/");
18.9 CAPÍTULO 10
18.9.1 EJERCICIO 12
Al pasar con el ratón sobre una imagen, el puntero cambia de aspecto (cursor:
move;) y se permite arrastrar el contenido.
Al arrastrar el elemento, la zona que contiene la cesta de la compra se ilumina.
Al soltar la imagen sobre la cesta de la compra, añade el producto si no existía,
mostrando la imagen, el nombre del producto, la cantidad de productos en la cesta
(en este caso 1) y el coste total para ese producto.
Al soltar la imagen sobre la cesta de la compra, si el producto ya se encontraba en la
cesta, actualiza la cantidad de productos y su precio.
18.11 CAPÍTULO 12
18.11.1 EJERCICIO 14
Crear un Web worker que dado un número entero, calcule todos los números primos
comprendidos entre 1 y dicho número.
18.12 CAPÍTULO 13
18.12.1 EJERCICIO 15
type : "color",
type : "history",
type : "message",