EFECTOS JAVASCRIPT VISUALES, DE IMÁGENES, TEXTO... RECURSIÓN. SETTIMEOUT NO FUNCIONA EN BUCLES FOR, WHILE,? (CU01166E)

Documentos relacionados
CREAR OBJETOS JAVASCRIPT CON THIS Y NEW. EJEMPLOS PARA ENTENDER QUÉ SON LOS OBJETOS Y PARA QUÉ SIRVEN. (CU01143E)

EJEMPLO RELOJ JAVASCRIPT. SETTIMEOUT, CLEARTIMEOUT, SETINTERVAL, REQUEST ANIMATIONFRAME. (CU01164E)

OPERADOR CONDICIONAL TERNARIO TIPO IF CON INTERROGACIÓN (JAVASCRIPT, JAVA, ETC.) Y DOS PUNTOS. EJEMPLOS (CU01152E)

DEGRADADOS CSS. EFECTO LINEAL Y RADIAL. LINEAR-GRADIENT. ANGULOS CSS: UNIDADES ANGULARES DEG, GRAD, TURN, RAD. (CU01060D)

IF ELSE, IF ELSE IF JAVASCRIPT. CONDICIONALES DEL FLUJO O ESTRUCTURAS DE DECISIÓN. EJEMPLOS. EJERCICIOS. (CU01119E)

SWITCH JAVASCRIPT. SELECCIÓN ENTRE ALTERNATIVAS. DIAGRAMA DE FLUJO Y EJEMPLO DE APLICACIÓN. (CU01120E)

HERENCIA JAVASCRIPT: EJEMPLO CON CÓDIGO BÁSICO. JERARQUÍA DE CLASES EN CADENA DE PROTOTIPOS. (CU01149E)

CAPTURAR EVENTOS DE TECLADO JAVASCRIPT. TECLA PULSADA. FROMCHARCODE. KEYCODE, WICH. (CU01161E)

Z-INDEX CSS NO FUNCIONA? CONTROL DE SUPERPOSICIÓN DE ELEMENTOS COMO CAPAS, DIV O IMÁGENES (CU01039D)

DEPURAR JAVASCRIPT. CONSOLE.LOG. DEBUG DE ERRORES CON FIREFOX (FIREBUG), CHROME, INTERNET EXPLORER. IDES. (CU01151E)

LÍNEAS SEPARADORAS. ETIQUETA <HR>. COMENTARIOS EN HTML. ATRIBUTOS SIZE, WIDTH, NOSHADE (DEPRECATED). EJEMPLOS (CU00716B)

ARRAYS ASOCIATIVOS JAVASCRIPT? MAPS? RECORRER PROPIEDADES DE OBJETOS CON FOR IN. EJEMPLOS EJERCICIOS RESUELTOS. (CU01146E)

DE LA ESTRUCTURA HTML Y SU SEMÁNTICA AL MODELO DE CAJAS CSS. ELEMENTOS BLOCK Y ELEMENTOS INLINE (CU01008D)

ADDEVENTLISTENER JAVASCRIPT. REMOVE. ATTACHEVENT. THIS EN EVENTOS. PROPAGACIÓN. BUBBLING. CAPTURA. (CU01158E)

CSS VERTICAL-ALIGN MIDDLE NO FUNCIONA? CENTRAR VERTICALMENTE UNA IMAGEN, TEXTO, DIV, ETC. EJEMPLOS (CU01043D)

ENVÍO DE DATOS DE UN FORMULARIO CON PHP. MÉTODOS GET Y POST. EJEMPLOS Y EJERCICIOS RESUELTOS. (CU00832B)

VARIABLES STRING JAVASCRIPT. DEBEN USARSE COMILLAS SIMPLES O DOBLES? CARACTERES DE ESCAPE \N \T.LENGTH (CU01114E)

JERARQUÍA DE OBJETOS JAVASCRIPT. FORMS, ELEMENTS, IMAGES, LINKS. NAVIGATOR: USERAGENT, GEOLOCATION, ONLINE. (CU01170E)

API CANVAS HTML Y JAVASCRIPT. EJEMPLOS. DIBUJAR CÍRCULOS, FORMAS, GRÁFICOS, ANIMACIONES, JUEGOS, ETC. (CU01195E)

COMUNICACIÓN ENTRE EL CLIENTE Y SERVIDOR SIN PHP Y CON PHP. INTÉRPRETE PHP Y GESTOR DE BASES DE DATOS (CU00804B)

EFECTO SOMBRA CSS CON BOX-SHADOW. SOMBRA INTERIOR INSET. BLUR O DIFUMINADO, SPREAD. EJEMPLOS Y EJERCICIOS RESUELTOS (CU01059D)

UTILIDAD DE CSS EN DESARROLLOS WEB JUNTO A HTML Y JAVASCRIPT. APLICAR ESTILOS. EJEMPLO SENCILLO. (CU00732B)

FUNCIONES PHP: DECLARACIÓN Y LLAMADAS. PARÁMETROS, RETURN. EJERCICIOS EJEMPLOS RESUELTOS. (CU00827B)

QUÉ ES Y PARA QUÉ SIRVE EL LENGUAJE CSS (CASCADING STYLE SHEETS HOJAS DE ESTILOS EN CASCADA)? (DV00203A)

Introducción al desarrollo web (idesweb) - 3 a ed.

CONCEPTO FLOAT CSS. NONE, LEFT, RIGHT Y CENTRAR?. COLOCAR TEXTO ALREDEDOR DE UNA IMAGEN. EJEMPLOS DE POSICIONAMIENTO FLOTANTE (CU01034D)

MENÚS HORIZONTALES CSS Y MENÚS VERTICALES. CREAR MENÚS CON EFECTOS A PARTIR DE LISTAS CSS. CÓDIGO DE EJEMPLOS. (CU01049D)

JavaScript: Introducción

COMPARAR CADENAS CON PHP STRCMP, == Ó ===? NO DISTINGUIR MAYÚSCULAS O MINÚSCULAS: STRCASECMP. RELLENAR CON STR_PAD. (CU00829B)

EL MÉTODO EQUALS EN JAVA. DIFERENCIA ENTRE IGUALDAD E IDENTIDAD. COMPARAR OBJETOS. EJEMPLOS. (CU00662B)

LECTURA Y ESCRITURA (fwrite) DE ARCHIVOS DE TEXTO CON PHP. MODOS DE ACCESO. EJERCICIOS RESUELTOS Y EJEMPLOS. (CU00837B)

API GEOLOCATION Y API GOOGLE MAPS JAVASCRIPT. EJEMPLOS. INSERTAR MAPAS INTERACTIVOS, SATÉLITE, ETC. EN WEBS. EFECTOS. (CU01197E)

ESTRUCTURAS DE CONTROL

1. Haz que se muestre una pantalla de alerta con tu nombre. 2. Repite el ejercicio anterior pero usando una variable para guardar tu nombre

LEER Y ESCRIBIR ARCHIVOS DE TEXTO CON PHP. FUNCIONES FOPEN (MODOS), FGETS, FPUTS, FCLOSE Y FEOF. EJEMPLOS (CU00836B)

TIPOS DE BUCLES O CICLOS DE REPETICIÓN EN PHP: WHILE, DO WHILE Y FOR. EJEMPLOS Y EJERCICIOS RESUELTOS. (CU00822B)

Ejemplos prácticos de JavaScript sin utilizar jquery

PRACTICA JSP SEMANA 2

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

Conceptos Teóricos de HTML5 (material extra adicional libro):

LENGUAJES JÓVENES PROGRAMADORES

Universidad de Chile - Magister Artes Mediales ARTE / INTERNET. Clase 4: HTML

Cuáles son los lenguajes que pueden utilizarse para programar Karel?

FORMULARIOS EN HTML. OPCIONES. CASILLAS DE VERIFICACIÓN CHECKBOX. BOTONES DE RADIO. LISTAS DE OPCIONES SELECT, OPTGROUP, OPTION.

Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A)

QUÉ ES Y PARA QUÉ SIRVE JAVASCRIPT? EMBEBER JAVASCRIPT EN HTML. ALTERNATIVAS. EJEMPLO SENCILLO. (CU00730B)

Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Tipos de Esquema

ENCABEZADOS HTML <h1> A <h6>, PÁRRAFOS <p>, APLICAR ESTILOS Y ETIQUETA <pre> DE TEXTO PREFORMATEADO. EJEMPLOS (CU00715B)

Unidad IV: Programación del lado del cliente

Herramientas computacionales para la matemática MATLAB: Estructuras de control

PHP INSERT INTO VALUES. INSERTAR DATOS (REGISTROS O FILAS) EN BASE DE DATOS MySQL. EJEMPLOS Y EJERCICIO RESUELTO (CU00843B)

La plantilla propone aprovechar esta estructura en común y sólo modificar el contenido del área del documento que sea diferente.

JAV JA A V S A C S R C I R P I T

Curso ONLINE de Javascript, jquery y Angular2_. Duración: 50 sesiones aprox. (150 horas lectivas)

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

Programación. Test Autoevaluación Tema 4

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

ASIGNACIÓN DE IGUALDAD EN JAVA. REFERENCIAS A OBJETOS. DIFERENCIA ENTRE IGUALDAD E IDENTIDAD. (CU00663B)

Node.JS Raspberry Pi (RPi) 2015/05/08 Juan V. Capella

Tipos de errores en Visual Basic: de compilación, de ejecución, de sintaxis. Depuración. (CU00352A)

TEMA 3 A: INTRODUCCIÓN AL DOM

EJEMPLO DE CONSULTA PHP MYSQL. SELECT. USO DEL BUCLE WHILE CON MYSQLI_FETCH_ARRAY PARA EXTRAER LOS RESULTADOS DE UNA CONSULTA.

GENERALIDADES DEL LENGUAJE C

Personalizando Plantillas

Funciones básicas del depurador

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

PHP: Lenguaje de programación

DISEÑO Y ELABORACIÓN DE PÁGINAS WEB

Scripting en el cliente: Javascript. Tecnologías Web

LABORATORIO 2. I. Desarrollo

4- Introducción a PHP

<script type="text/javascript" src="miscript.js"></script>

<DOCTYPE HTML PUBLIC> <HTML> <HEAD>... </HEAD> <FRAMESET>... </FRAMESET> </HTML>

Manejo de módulos y recursión en programación. Pseudocódigo. (CU00204A)

Ejercicios ejemplos resueltos. Verificar algoritmos o programas con tablas de variables. (CU00236A)

Estructuras de control

Temario Programación Web para Web

Tema IV El lenguaje de programación PHP Tipos de Datos

Programación Estructurada. Sesión 4:Estructuras de control

Manejo de eventos en JavaScript WEB-TECHNOLOGIES

Técnicas para la enseñanza de. Desarrollo Web. M is notas de CSS. Liliana Gutiérrez Flores. Enero de 2016

Es la estructura que permite ejecutar los comandos solamente si se cumple una determinada condición. La sintaxis más usual:

LENGUAJES DE PROGRAMACIÓN WEB (PHP1, HTML52)

Aprenda los lenguajes HTML5, CSS3 y JavaScript para crear su primer sitio web

QUÉ ES Y PARA QUÉ SIRVE AJAX? JAVASCRIPT ASÍNCRONO, XML Y JSON. VENTAJAS E INCONVENIENTES DE AJAX. XMLHTTPREQUEST. EJEMPLO.

ESTRUCTURAS REPETITIVAS EN PHP

Ejemplos-Capítulo-6 Ejemplo-1: Distintos tipos de sombras en el navegador Safari de Apple

SESIÓN DE EJERCICIOS E1

Informática General 2017 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Problemas en programación que se resuelven recurriendo a una tabla de decisión y su algoritmia (CU00112A)

REPASO ARRAYS O ARREGLOS UNIDIMENSIONALES EN JAVA. EJEMPLOS DE CÓDIGO. (CU00903C)

Programación estructurada

Capítulo 1 Documentos HTML5

Sentencias de Procesamiento Iterativo: while y do-while

Dpto. Lenguajes y Ciencias de la Computación E.T.S.I. Telecomunicación. Laboratorio de Programación Uso del depurador en Dev-C++

Boletín I de ASP.Net. Conceptos básicos.

ESTILOS DE LISTAS CSS. LIST-STYLE-TYPE (DISC, NONE, ETC.) LIST-STYLE- POSITION (OUTSIDE, INSIDE), LIST-STYLE- IMAGE. SHORTAND LIST- STYLE.

fundamentos de programación (unidad 4) programación estructurada en Java

Texto estructurado (ST)

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Transcripción:

APRENDERAPROGRAMAR.COM EFECTOS JAVASCRIPT VISUALES, DE IMÁGENES, TEXTO... RECURSIÓN. SETTIMEOUT NO FUNCIONA EN BUCLES FOR, WHILE,? (CU01166E) Sección: Cursos Categoría: Tutorial básico del programador web: JavaScript desde cero Fecha revisión: 2029 Resumen: Entrega nº66 del Tutorial básico JavaScript desde cero. Autor: César Krall

EFECTOS JAVASCRIPT Existen diferentes APIs y librerías JavaScript que permiten generar efectos visuales muy llamativos. En este curso no queremos entrar a estudiar estas posibilidades ya que nos estamos centrando en los fundamentos de JavaScript. Pero ya con estoss podemos generar efectos variados. Los efectos visuales muchas veces se basarán en el uso de recursión y funciones relacionadas con la repetición en el tiempo y ejecución de funciones con cierto retardo en el tiempo. RECURSIÓN CON JAVASCRIPT La recursión es una técnica de programación admitida por la mayor parte de los lenguajes modernos basada en la autollamada de un método o función a sí mismo. Estas llamadas van creando una pila de llamadas hasta que se llega a lo que se denomina caso base: una situación en que ya no se realiza una nueva llamada recursiva, sino que se devuelve un resultado concreto que da lugar a la salida de la recursión. La recursión no es fácil de entender ni de explicar. No te preocupes si después de leer lo que vamos a exponer no terminas de comprenderla del todo. Ten en cuenta que muchos programadores no usan o no saben manejar la recursión y que aprenderr su uso y manejo requiere tiempo y práctica. Uno de los ejemplos más habituales de recursión es el cálculo del factorial de un número. El factorial de un número n se calcula como n * (n-1) * (n-2) * ( ) * 1. Por ejemplo el factorial de 3 es 3*2*1 = 6, mientras que el factorial de 5 es 5*4*3*2*1 = 120. La forma más intutiva de calcular el factorial es no recursiva, sino usando un bucle tradicional como vamos a ver ahora. Escribe este código y comprueba sus resultados: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html><head><title>ejemplo aprenderaprogramar.com</title><meta charset="utf-8"> function ejemplo(numero) { alert ('El factorial de 5 es '+factorialiterativo(numero)); function factorialiterativo(numero){ var factorial = 1; //Factorial de numero for (var i= =numero; i>0; i--){ factorial = factorial * (i); return factorial; </head> <body onload="ejemplo(5)" > <div id="cabecera"><h2>cursos aprenderaprogramar.com</h2><h3>ejemplos JavaScript</h3></div> </body>< </html>

Ahora vamos a plantear el factorial de forma recursiva. El factorial de un número se puede ver como factorial de n = n * (factorial de n-1) Así el factorial de 5 podríamos verlo como 5 * (factorial de 4), que a su vez es 5 * 4 * (factorial de 3), que a su vez es 5 * 4 * 3 * (factorial de 2) Cuándo termina este proceso recursivo? Cuando llegamos a un caso en el que el resultado es elemental, es decir, un caso donde no es necesario utilizar factorial de n = n * (factorial de n-1), sino simplemente factorial de n = resultado elemental. Este caso, que se denomina caso base, para el factorial lo tenemos con el 1: factorial de 1 es 1, caso elemental. El código recursivo para el factorial sería: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html><head><title>ejemplo aprenderaprogramar.com</title><meta charset="utf-8"> function ejemplo(numero) { alert ('El factorial de '+numero+' es '+factorialrecursivo(numero)); function factorialrecursivo(numero){ if (numero==0) {return 1; //caso base else {return numero*factorialrecursivo(numero-1); //caso recursivo </head> <body onload="ejemplo(5)" > <div id="cabecera"><h2>cursos aprenderaprogramar.com</h2><h3>ejemplos JavaScript</h3></div> </body></html> Los pasos que da el factorial recursivo son: 5 * factorialrecursivo(4) -- > 5 * 4 * factorialrecursivo(3) -- > 5 * 4 * 3 * factorialrecursivo(2) -- > 5 * 4 * 3 * 2 * factorialrecursivo(1) y llega al caso base, devolviendo 5*4*3*2*1 = 120. A la hora de plantear un proceso recursivo siempre es necesario tener presente la necesidad de que exista un caso base: si no es así, la recursión puede no terminar nunca y se entra en procesos que se asemejan a un bucle infinito. Cuando esto ocurre, en la consola de depuración de JavaScript nos podemos encontrar mensajes como Too much recursion. EL PROBLEMA DEL SETTIMEOUT DENTRO DE BUCLES Supongamos que queremos ejecutar un proceso de forma que entre cada ejecución haya un intervalo de 5 segundos y escribimos un bucle con un settimeout llamando a la función oportuna dentro del bucle: while (contador<numeronodos){ contador = contador+1; referenciatimer[contador] = settimeout (cambiarnodo(nodostitulocurso[contador]), 5000);

La idea es realizar el proceso cada 5 segundos, sin embargo hay un fallo de planteamiento que hace que esto no funcione: lo que ocurre en realidad es que se ejecuta el bucle en todas sus iteraciones de forma prácticamente instantánea, lo que da lugar a que el settimeout no se ejecute. Una función para detenerse tiene que llamarse a sí misma o utilizar algún mecanismo que fuerce la detención. Vamos a analizar esto con mayor detenimiento. Para ello escribe y ejecuta este código: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html><head><title>ejemplo aprenderaprogramar.com</title><meta charset="utf-8"> <style type="text/css"> *{font-family: verdana, sans-serif;.nodonuevo{background-color: black; color:white; width:100px; text-align:center; padding:20px; font-size:32px; float:left; </style> var contador = 1; function mostrarnumconretardo() { settimeout(crearnodo, 1000); function crearnodo() { var nodohijo = document.createelement("div"); nodohijo.classname="nodonuevo"; nodohijo.innerhtml = ''+contador; document.body.appendchild(nodohijo); contador = contador+1; </head> <body onload="mostrarnumconretardo()" > <div id="cabecera"><h2>cursos aprenderaprogramar.com</h2><h3>ejemplos JavaScript</h3></div> </body></html> Con este código hacemos que se muestre el número 1 por pantalla después de 1 segundo. Hasta aquí todo correcto. Ahora supongamos que queremos que se cuente hasta 10 y lo hacemos con un bucle. Para ello modificamos la función mostrarnumconretardo que queda así: function mostrarnumconretardo() { for(var i=0; i<10; i++){ settimeout(crearnodo, 1000); El resultado no es que se vayan mostrando progresivamente 1, luego 2, luego 3, luego 4 sino que se nos muestran de golpe todos los números: 1, 2, 3,4, 5, 6, 7, 8, 9, 10. Por qué? Porque el bucle se ejecuta de forma inmediata quedando 10 órdenes de que se muestren dentro de 1 segundo los números, cuando transcurre un segundo se ejecutan todas las órdenes.

Para solucionar este problema tenemos que forzar la detención y que la siguiente llamada se ejecute después de que el retardo previo haya tenido lugar. Hay varias maneras de solucionar esto. Aquí vamos a mostrar una de ellas, basada en llamadas recursivas. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <title>ejemplo aprenderaprogramar.com</title> <meta charset="utf-8"> <style type="text/css"> *{font-family: verdana, sans-serif;.nodonuevo{background-color: black; color:white; width:100px; text-align:center; padding:20px; font-size:32px; float:left; </style> var contador = 1; function mostrarnumconretardo() { settimeout(crearnodo, 1000); function crearnodo() { if (contador==11) { //Caso base: fin de la recursión (no hacemos nada) else { //Caso recursivo var nodohijo = document.createelement("div"); nodohijo.classname="nodonuevo"; nodohijo.innerhtml = ''+contador; document.getelementbyid('cabecera').appendchild(nodohijo); contador = contador+1; settimeout(crearnodo, 1000); </head> <body onload="mostrarnumconretardo()" > <div id="cabecera" style="width:500px;"> <h2>cursos aprenderaprogramar.com</h2> <h3>ejemplos JavaScript</h3></div> </body> </html> En este código observamos lo siguiente: a) No existe un bucle como existía en el ejemplo puesto anteriormente. Lo que existen son llamadas recursivas que simulan un bucle (de hecho, llevamos un contador). b) Cada llamada recursiva introduce un retardo. De este modo, la siguiente ejecución no comienza si no se ha producido el retardo. A diferencia del caso de un bucle, donde la ejecución es instantánea, en este caso la ejecución va siendo progresiva: no comienza la siguiente recursión hasta que pasa el tiempo de retardo especificado. El resultado esperado es que vayan apareciendo en pantalla progresivamente los números 1, 2, 3, hasta 10, con un pequeño retardo en la aparición de cada número.

CREAR EFECTOS JAVASCRIPT: HASTA DONDE LA IMAGINACIÓN ALCANCE Con las herramientas que hemos visto a lo largo del curso podemos crear potentes animaciones con JavaScript. Es cierto que existen frameworks JavaScript y APIs que nos facilitan crear animaciones, pero nosotros mismos podemos plantear animaciones usando puro código JavaScript hasta donde la imaginación nos alcance Escribe el siguiente código y comprueba los resultados de ejecución. Este código corresponde a una página web real que lanzamos en el dominio http://aprendeaprogramar.es. El código es sencillo, puede resultar un poco extenso para estudiar pero merece la pena, ya que aborda diferentes materias que hemos ido estudiando a lo largo del curso como acceso y manipulación del DOM, creación de efectos y retardo con settimeout, recursión, cambio de estilos CSS, uso de variables de distintos tipos, etc. <!DOCTYPE HTML PUBLIC "-//W3C//DTDD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html><head> <title>cursos aprende a programar</title> <meta charset="utf-8"> <meta name="description" content="aprende a programar con cursos reconocidos por su calidad didáctica"> <meta name="keywords" " content="html, CSS, JavaScript, Java, Visual Basic, Joomla, PHP"> <style type="text/css"> *{font-family: verdana, sans-serif; #principal{text-align:center;width:95%; margin: 0 auto;.titulocurso {color: white; float:left; padding: 36px 44px; font-size: 2.65em; font-style:bold; text-decoration:none; ; a:hover{color:orange!important; </style> function ejemplo(){ var nodostitulocurso = document.queryselectorall(".titulocurso"); var contador = 0; var nodoscambiados = new Array(); var tocacambiar = true; settimeout(function() {ejemploaccion(nodostitulocurso, nodoscambiados, contador, tocacambiar), 1500);

function ejemploaccion(nodostitulocurso, nodoscambiados, contador, tocacambiar) { if (contador<nodostitulocurso.length){ var indice = Math.floor((Math.random() * (nodostitulocurso.length))); if (nodoscambiados.length!=0) { for (var i=0; i<nodoscambiados.length; i++) { if(nodoscambiados[i]==indice) {tocacambiar = false; if (tocacambiar==true) { cambiarnodo(nodostitulocurso[indice]); nodoscambiados.push(indice); contador = contador+1; settimeout(function() {ejemploaccion(nodostitulocurso, nodoscambiados, contador, tocacambiar), 1500); else {tocacambiar=true; ejemploaccion(nodostitulocurso, nodoscambiados, contador, tocacambiar); else { //Caso base fin de la recursión document.body.style.backgroundcolor='black'; document.getelementbyid('principal').style.color='white'; for (var i=0; i<nodostitulocurso.length; i++) { nodostitulocurso[i].style.color='yellow'; function cambiarnodo(elnodo){ elnodo.style.backgroundcolor = 'black'; </head> <body onload="ejemplo()"> <div id="principal"><h1>cursos de programación</h1> <h3>reconocidos por su calidad didáctica</h3> <div ><a class="titulocurso" href="http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=28&itemid=59"> Fundamentos</a></div> <div ><a class="titulocurso" href="http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&itemid=188"> Java</a></div> <div ><a class="titulocurso" href="http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=69&itemid=192"> HTML</a></div> <div ><a class="titulocurso" href="http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=75&itemid=203"> CSS</a></div> <div ><a class="titulocurso" href="http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=78&itemid=206"> JavaScript</a></div> <div ><a class="titulocurso" href="http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=70&itemid=193"> PHP</a></div> <div ><a class="titulocurso" href="http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=38&itemid=152"> Joomla</a></div> <div ><a class="titulocurso" href="http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=37&itemid=61"> Visual Basic</a></div> <div ><a class="titulocurso" href="http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=28&itemid=59"> Pseudocódigo</a></div> <div ><a class="titulocurso" href="http://aprenderaprogramar.com/index.php?option=com_content&view=section&layout=blog&id=7&itemid=26"> Libros/ebooks</a></div> <div ><a class="titulocurso" href="http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=64&itemid=87">cursos tutorizados</a></div> </div></body></html>

EJERCICIO 1 Realiza una descripción de cada una de las instrucciones del código del ejemplo anterior indicando cuál es su cometido. Si has seguido el curso desde el principio, debes ser capaz de interpretar todo el código. Ejemplo: La primera línea <!DOCTYPE realiza la declaración de tipo de documento HTML a efectos de que los navegadores interpreten en qué versión de HTML está escrito el código. La etiqueta html es la etiqueta de apertura del código HTML. La etiqueta head es Para comprobar si tus respuestas y código son correctos puedes consultar en los foros aprenderaprogramar.com. EJERCICIO 2 Crea una animación JavaScript (decide tú el efecto que quieres implementar: pueden ser cosas moviéndose por la pantalla, texto cambiando de tamaño o cualquier otra cosa que se te ocurra) con las herramientas que hemos ido conociendo a lo largo del curso. Ejecútalo en distintos navegadores y comprueba que se ejecute tal y como esperas en todos ellos. Para comprobar si tus respuestas y código son correctos puedes consultar en los foros aprenderaprogramar.com. Próxima entrega: CU01167E Acceso al curso completo en aprenderaprogramar.com -- > Cursos, o en la dirección siguiente: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=78&itemid=206