clase:daw:diw:2eval:tema10
Diferencias
Muestra las diferencias entre dos versiones de la página.
| clase:daw:diw:2eval:tema10 [2025/11/03 11:37] – creado - editor externo 127.0.0.1 | clase:daw:diw:2eval:tema10 [2026/10/23 23:04] (actual) – Reorganización del módulo: contenido movido a las páginas nuevas de clase:daw:diw claude | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| - | ====== 10. Animaciones ====== | ||
| - | En este tema vamos a hablar de 3 cosas distintas: | ||
| - | * Transformaciones: | ||
| - | * Transiciones: | ||
| - | * Animaciones: | ||
| - | |||
| - | |||
| - | <note tip> | ||
| - | A veces nos referiremos a **animaciones** con el significado de hacer que las cosas se //muevan// en la pantalla y no al API de animaciones de CSS. Aunque realmente las animaciones no es solo que las cosas se muevan , se puede aplicar a muchas propiedades CSS como colores, opacidad, etc. | ||
| - | </ | ||
| - | |||
| - | |||
| - | ¿Que podemos hacer con animaciones? | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | |||
| - | Lo mas importante de las animaciones es usarlas cuando tengan sentido y no solo como una moda o capricho. Es decir hay que usarlas cuando aportan algo al usuario. Un artículo que lo explica muy bien es el siguiente: [[https:// | ||
| - | |||
| - | |||
| - | Mas información: | ||
| - | * Diseño | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * CSS | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * Animaciones que no aportan nada. | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | |||
| - | ===== Transformaciones ===== | ||
| - | Las transformaciones es simplemente usar una nueva propiedad de CSS llamada '' | ||
| - | |||
| - | <note tip> | ||
| - | Esta propiedad es como cualquier otra de CSS y no tiene nada que ver con las animaciones , aunque se suele usar bastante con ellas, por eso se explica aquí. | ||
| - | </ | ||
| - | |||
| - | |||
| - | Esta propiedad CSS permite hacer lo siguiente sobre un elemento: | ||
| - | * Moverlo | ||
| - | * Escalarlo (Hacerlo mas grande o mas pequeño) | ||
| - | * Rotarlo | ||
| - | * Distorsionarlo: | ||
| - | |||
| - | El listado de opciones es el siguiente: | ||
| - | * translate(x, | ||
| - | * translateX(n) | ||
| - | * translateY(n) | ||
| - | * scale(x,y) | ||
| - | * scaleX(n) | ||
| - | * scaleY(n) | ||
| - | * rotate(angle) | ||
| - | * skew(x-angle, | ||
| - | * skewX(angle) | ||
| - | * skewY(angle) | ||
| - | |||
| - | |||
| - | |||
| - | \\ | ||
| - | \\ | ||
| - | |||
| - | Vamos ahora unos ejemplos: | ||
| - | |||
| - | |||
| - | * Mover el elemento 50px en el eje X y 100px en el eje Y | ||
| - | <sxh css> | ||
| - | div { | ||
| - | transform: translate(50px, | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | \\ | ||
| - | \\ | ||
| - | |||
| - | * Rotar el elemento 20 grados | ||
| - | <sxh css> | ||
| - | div { | ||
| - | transform: rotate(20deg); | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | \\ | ||
| - | \\ | ||
| - | |||
| - | * Hacer el doble de grande el elemento en el eje X y el tripe en el eje Y. | ||
| - | <sxh css> | ||
| - | div { | ||
| - | transform: scale(2, 3); | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | \\ | ||
| - | \\ | ||
| - | |||
| - | * Hacer la mitad de grande el elemento tanto eje X como en el eje Y. | ||
| - | <sxh css> | ||
| - | div { | ||
| - | transform: scale(0.5, 0.5); | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | \\ | ||
| - | \\ | ||
| - | |||
| - | * Distorsiona el elemento 20 grados en el eje X y 10 grados en el eje Y. | ||
| - | <sxh css> | ||
| - | div { | ||
| - | transform: skew(20deg, 10deg); | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | \\ | ||
| - | \\ | ||
| - | * Tambien se pueden aplicar varias transformaciones a la vez: | ||
| - | <sxh css> | ||
| - | div { | ||
| - | transform: translate(50px, | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | \\ | ||
| - | \\ | ||
| - | |||
| - | |||
| - | |||
| - | Las transformaciones que hemos visto con en 2 dimensiones. CSS también permite transformaciones en 3D. | ||
| - | |||
| - | El listado de opciones es el siguiente: | ||
| - | * translate3d(x, | ||
| - | * translateX(x) | ||
| - | * translateY(y) | ||
| - | * translateZ(z) | ||
| - | * scale3d(x, | ||
| - | * scaleX(x) | ||
| - | * scaleY(y) | ||
| - | * scaleZ(z) | ||
| - | * rotate3d(x, | ||
| - | * rotateX(angle) | ||
| - | * rotateY(angle) | ||
| - | * rotateZ(angle) | ||
| - | * perspective(n) | ||
| - | |||
| - | Mas información: | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | * [[https:// | ||
| - | |||
| - | ==== Origen de la transformación ==== | ||
| - | Existe la propiedad '' | ||
| - | |||
| - | Esto es muy útil por ejemplo para rotaciones para que no rote respecto al centro de la imagen. | ||
| - | |||
| - | * Rotar respecto al centro de la imagen (por defecto): | ||
| - | |||
| - | <sxh css> | ||
| - | .cuadrado--rotate-centro { | ||
| - | transform: rotate(360deg); | ||
| - | transform-origin: | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | * Rotar respecto a la esquina superior izquierda: | ||
| - | |||
| - | <sxh css> | ||
| - | .cuadrado--rotate-esquina-superior-izquierda { | ||
| - | transform: rotate(360deg); | ||
| - | transform-origin: | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | |||
| - | * Ejemplo completo con transiciones: | ||
| - | <sxh html> | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | <meta charset=" | ||
| - | <meta name=" | ||
| - | < | ||
| - | |||
| - | </ | ||
| - | |||
| - | < | ||
| - | .l-center { | ||
| - | display: grid; | ||
| - | place-items: | ||
| - | width: 100%; | ||
| - | height: 50vw; | ||
| - | } | ||
| - | |||
| - | .c-cuadrado { | ||
| - | border: 1px solid red; | ||
| - | background: lightpink; | ||
| - | width: | ||
| - | height: 200px; | ||
| - | transition: transform 4s; | ||
| - | transform-origin: | ||
| - | } | ||
| - | |||
| - | .c-cuadrado: | ||
| - | transform: rotate(360deg); | ||
| - | } | ||
| - | |||
| - | |||
| - | </ | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | ===== Transiciones ===== | ||
| - | Las transiciones se usan sobre todo para hacer cambios en los eventos de : | ||
| - | * '': | ||
| - | * '': | ||
| - | * Etc. | ||
| - | |||
| - | Mas información: | ||
| - | * [[https:// | ||
| - | * [[http:// | ||
| - | |||
| - | Veamos un ejemplo con '': | ||
| - | |||
| - | <sxh html> | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | .c-button { | ||
| - | padding: 10px 20px 10px 20px; | ||
| - | background-color: | ||
| - | border: 1px solid #bbd4f7; | ||
| - | border-radius: | ||
| - | cursor: pointer; | ||
| - | } | ||
| - | | ||
| - | .c-button: | ||
| - | background-color: | ||
| - | box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); | ||
| - | } | ||
| - | </ | ||
| - | </ | ||
| - | < | ||
| - | <button class=" | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | En el ejemplo que acabo de poner, al pasar el cursos sobre el botón se añade una sombra y cambia el color de fondo. | ||
| - | |||
| - | Sin embargo el efecto queda mal ya que es muy brusco pasar de: | ||
| - | * '' | ||
| - | * '' | ||
| - | |||
| - | Para evitar ésto, usamos en CSS la transición de la siguiente forma: | ||
| - | <sxh css> | ||
| - | transition: background-color 1s, box-shadow 1s; | ||
| - | </ | ||
| - | |||
| - | Con la línea anterior se hace que el cambio del color y añadir la sombra se haga con un transición que durará 1 segundo. Ahora el ejemplo quedaría así: | ||
| - | |||
| - | <sxh html> | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | .c-button { | ||
| - | padding: 10px 20px 10px 20px; | ||
| - | background-color: | ||
| - | border: 1px solid #bbd4f7; | ||
| - | border-radius: | ||
| - | cursor: pointer; | ||
| - | transition: background-color 1s, box-shadow 1s; | ||
| - | } | ||
| - | | ||
| - | .c-button: | ||
| - | background-color: | ||
| - | box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); | ||
| - | } | ||
| - | </ | ||
| - | </ | ||
| - | < | ||
| - | <button class=" | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | Podemos aplicar las transiciones a cualquier propiedad CSS que tenga un rango de valores , como al color, a la sombra o como podíais imaginar a las transiciones. | ||
| - | |||
| - | Por lo tanto , siempre que usemos '': | ||
| - | |||
| - | La forma concreta de la propiedad '' | ||
| - | transition: propiedadCSS duracion timing-function retardo | ||
| - | |||
| - | * propiedadCSS: | ||
| - | * duracion: Duración en segundos de la transición | ||
| - | * timing-function: | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * retardo: Cuanto tiempo en segundos tarda en empezar la transición. Por ejemplo en '' | ||
| - | |||
| - | Mas información de la timing-function en: | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[http:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | Por ejemplo: | ||
| - | <sxh css> | ||
| - | transition: width 3s ease-in-out 2s | ||
| - | </ | ||
| - | Se cambiará el ancho . Durará 3 segundos. Empezará y terminará mas lentamente . Empezará con 2 segundos de retardo. | ||
| - | |||
| - | Como pasa mucho en las propiedades CSS se puede poner también como varias propiedades independientes: | ||
| - | <sxh css> | ||
| - | transition-property: | ||
| - | transition-duration: | ||
| - | transition-timing-function: | ||
| - | transition-delay: | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ===== Animaciones ===== | ||
| - | Las animaciones son similares a las transiciones pero mas potentes además que suelen usarse desde JavaScript. | ||
| - | |||
| - | Mas información: | ||
| - | * [[http:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * | ||
| - | |||
| - | |||
| - | Las animaciones constan de dos apartados distintos. | ||
| - | * La definición de la propia animación con '' | ||
| - | * Los parámetros de la animación con la propiedad '' | ||
| - | |||
| - | Veamos un ejemplo: | ||
| - | |||
| - | <sxh html> | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | .c-cuadrado { | ||
| - | width: 100px; | ||
| - | height: 100px; | ||
| - | background-color: | ||
| - | border-radius: | ||
| - | } | ||
| - | | ||
| - | .c-cuadrado--girar { | ||
| - | animation-name: | ||
| - | animation-duration: | ||
| - | } | ||
| - | | ||
| - | | ||
| - | @keyframes animacion-girar { | ||
| - | 0% { | ||
| - | transform: rotate(0deg); | ||
| - | background-color: | ||
| - | } | ||
| - | | ||
| - | 50% { | ||
| - | transform: rotate(360deg); | ||
| - | background-color: | ||
| - | } | ||
| - | | ||
| - | 100% { | ||
| - | transform: rotate(0deg); | ||
| - | background-color: | ||
| - | } | ||
| - | | ||
| - | } | ||
| - | </ | ||
| - | </ | ||
| - | < | ||
| - | <div style=" | ||
| - | <div id=" | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | Dentro de '' | ||
| - | |||
| - | Luego dentro de la clase '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | |||
| - | Mas información de la timing-function en: | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[http:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | |||
| - | ==== JavaScript ==== | ||
| - | Para volver a ejecutar la animación desde JavaScript se hace de la siguiente forma: | ||
| - | |||
| - | <sxh javascript> | ||
| - | function animar() { | ||
| - | var cuadradoElement=document.getElementById(" | ||
| - | cuadradoElement.classList.remove(" | ||
| - | setTimeout(function() { | ||
| - | cuadradoElement.classList.add(" | ||
| - | },10); | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | <sxh html> | ||
| - | <button onclick=" | ||
| - | </ | ||
| - | |||
| - | Es decir que hay que quitar la clase CSS que tiene la animación y volver a ponerla. El problema es que si la quitas y la vuelves a poner , el navegador no se entera. Así que hay que hacer el truco de quitarla , esperar 10 ms con un timeout y añadir la clase. | ||
| - | |||
| - | |||
| - | Mas información: | ||
| - | * [[https:// | ||
| - | |||
| - | === Movimiento de una campana === | ||
| - | En este apartado podéis ver el movimiento real que haría una camapana. Para hacer el movimiento real se han usado las fórmulas físicas que describen el movimiento de dicha campana. | ||
| - | Está con rozamiento y sin él. | ||
| - | |||
| - | * {{ : | ||
| - | * {{ : | ||
| - | |||
| - | |||
| - | //El ejemplo es gracias a Àngela Hermosilla, licenciada en físicas y estudiantes de este ciclo de DAW//. | ||
| - | |||
| - | ===== Animaciones simétricas ===== | ||
| - | La animación que hemos visto , vuelve al mismo sitio. Si queremos una animación que haga eso , no es necesario definir //la ida y la vuelta//. Es tan sencillo como solo definir la ida y decir que vuelva. | ||
| - | |||
| - | Eso se consigue de la siguiente forma: | ||
| - | |||
| - | <sxh css> | ||
| - | .c-cuadrado--girar { | ||
| - | animation-name: | ||
| - | animation-duration: | ||
| - | animation-iteration-count: | ||
| - | animation-direction: | ||
| - | } | ||
| - | |||
| - | |||
| - | @keyframes animacion-girar { | ||
| - | 0% { | ||
| - | transform: rotate(0deg); | ||
| - | background-color: | ||
| - | } | ||
| - | | ||
| - | 100% { | ||
| - | transform: rotate(360deg); | ||
| - | background-color: | ||
| - | } | ||
| - | | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Los cambios que hemos hecho son los siguientes: | ||
| - | * Hacemos que la animación dure la mitad: '' | ||
| - | * Pero hacemos que la haga 2 veces: '' | ||
| - | * Por último hacemos que la segunda vez la haga al revés: '' | ||
| - | |||
| - | Y con éste truco siempre tenemos una animación de ida y vuelta. | ||
| - | |||
| - | ===== Ejercicios ===== | ||
| - | |||
| - | ==== Ejercicio 1 ==== | ||
| - | Crea una página web que: | ||
| - | * Muestre un cuadrado rojo de 200px de lado. | ||
| - | * Que al poner el cursor encima | ||
| - | * Que al quitar el curso vuelva a su posición y su color original. | ||
| - | * Que dure 2 segundos. | ||
| - | |||
| - | |||
| - | ==== Ejercicio 2 ==== | ||
| - | Crea una página web que: | ||
| - | * Muestre un cuadrado rojo de 200px de lado. | ||
| - | * Que al poner el cursor encima | ||
| - | * Que al quitar el curso vuelva a su tamaño original. | ||
| - | * Que dure 3 segundos. | ||
| - | Crea un programa en JavaScript+HTML+CSS que el tamaño de un texto pase de los 12px iniciales a los 30px finales y que tarde 3 segundos. | ||
| - | |||
| - | ==== Ejercicio 3 ==== | ||
| - | Crea una página web: | ||
| - | * Que el fondo sea gris claro. | ||
| - | * Muestre un '' | ||
| - | * Que al poner el curso sobre él para escribir, se hagan los bordes redondeados, | ||
| - | * Que al quitar el curso el '' | ||
| - | * Que dure 1 segundo. | ||
| - | |||
| - | ==== Ejercicio 4 ==== | ||
| - | Crea una página web: | ||
| - | * En el fondo se verá una foto con la torre de pisa. | ||
| - | * Que sobre el borde superior de la torre coloques la imagen de una pelota. | ||
| - | * Que al pulsar un botón se active una animación que deje caer la pelta hasta el suelo y al acabar se quede ahí. | ||
| - | * Si se vuelve a pulsar el botón, repetirá la animación. | ||
| - | * La duración de la animación será de 9,4s (Es lo que tardaría en caer una pelota desde la torre de pisa suponiendo que no hay rozamiento) | ||
| - | |||
| - | Debes probar con distintas '' | ||
| - | |||
| - | ==== Ejercicio 5 ==== | ||
| - | Repite el ejercicio anterior de la torre de pisa pero ahora será una canasta de baloncesto y una pelota de baloncesto. | ||
| - | |||
| - | Otra diferencia es que la pelota al llegar abajo rebotará y volverá hasta arriba del todo y así indefinidamente. | ||
| - | |||
| - | ==== Ejercicio 6 ==== | ||
| - | Crea una página web: | ||
| - | * En el fondo se verá una foto del espacio y de la Estación Espacial Internacional (IIS). | ||
| - | * Que sobre algún lado de la IIS coloques la imagen de un astronauta. | ||
| - | * Que al pulsar un botón se active una animación que nueva el astronauta durante 1000px y al acabar se quede ahí. | ||
| - | * Si se vuelve a pulsar el botón, repetirá la animación. | ||
| - | * La duración de la animación será de 5s | ||
| - | |||
| - | Debes probar con distintas '' | ||
| - | |||
| - | ==== Ejercicio 7 ==== | ||
| - | Crea una página web: | ||
| - | * En el fondo se verá una foto de una carretera recta vista desde arriba. | ||
| - | * Que sobre el inicio de la carretera coloques la imagen de un coche visto desde arriba. | ||
| - | * Que al pulsar un botón se active una animación que nueva el coche hasta llegar al final de la carretera y al acabar se quede ahí. | ||
| - | * Si se vuelve a pulsar el botón, repetirá la animación. | ||
| - | * La duración de la animación será la necesaria para que de sensación de realidad. | ||
| - | |||
| - | Debes probar con distintas '' | ||
| - | |||
| - | ==== Ejercicio 8 ==== | ||
| - | Repite el ejercicio anterior pero ahora el coche irá frenando cuando llegue al final de la carretera. | ||
| - | |||
| - | |||
| - | ==== Ejercicio 9 ==== | ||
| - | Crea una página web: | ||
| - | * Que muestre un botón que tenga con el texto " | ||
| - | * Que cuando pasen 20 seg desde la carga de la página, se lance una animación que haga que el icono se haga un poco mas grande y tenga " | ||
| - | * La animación no se debe ejecutar si el usuario antes ha pulsado el botón. | ||
| - | * Al acabar la animación el icono se quedará como estaba | ||
| - | * La animación debe durar 2s. | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
clase/daw/diw/2eval/tema10.1762166239.txt.gz · Última modificación: por 127.0.0.1
