Bibliotecas de animación Js. Animaciones CSS3 y el nuevo método javascript Animate(). Complementos de JavaScript para animación



En los primeros años de la era de Internet, se almacenaban millones de archivos en miles de sitios FTP anónimos. En esta variedad, a los usuarios les resultó bastante difícil encontrar un programa adecuado para resolver su problema.

Además, no sabían de antemano si existía la herramienta que buscaban. Por lo tanto, tuvimos que visualizar manualmente los almacenamientos FTP, cuya estructura era significativamente diferente. Fue este problema el que llevó al surgimiento de uno de los aspectos clave. mundo moderno- Busqueda de internet.

/ foto de mariana abasolo

Historia de la creación

Se cree que el creador del primer motor de búsqueda fue Alan Emtage. En 1989, trabajó en la Universidad McGill de Montreal, a donde se mudó desde su Barbados natal. Una de sus tareas como administrador de facultad universitaria. tecnologías de la información fue encontrar programas para estudiantes y profesores. Para facilitar su trabajo y ahorrar tiempo, Alan escribió un código que lo buscó.

"En lugar de perder el tiempo deambulando por sitios FTP e intentando descubrir qué había en ellos, escribí guiones que lo hicieron por mí", dice Alan, "y lo hice rápidamente".

<поле>:<необязательный пробел><значение><необязательный пробел>
Registro<поле>podría tomar dos valores: User-agent o Disallow. El agente de usuario especificó el nombre del robot para el cual se describió la política y Disallow determinó las secciones a las que se les negó el acceso.

Por ejemplo, un archivo con dicha información niega a todos los robots el acceso a cualquier URL con /cyberworld/map/ o /tmp/ o /foo.html:

# robots.txt para http://www.example.com/ User-agent: * Disallow: /cyberworld/map/ # Este es un espacio URL virtual infinito Disallow: /tmp/ # estos pronto desaparecerán Disallow: /foo. HTML
Este ejemplo bloquea el acceso a /cyberworld/map para todos los robots excepto cybermapper:

# robots.txt para http://www.example.com/ Agente de usuario: * No permitir: /cyberworld/map/ # Este es un espacio URL virtual infinito # Cybermapper sabe adónde ir. Agente de usuario: cybermapper No permitir:
Este archivo "implementará" todos los robots que intenten acceder a la información del sitio:

# desaparecer Usuario-agente: * No permitir: /

Archie inmortal

Creado hace casi tres décadas, Archie no ha recibido ninguna actualización en todo este tiempo. Y ofrecía una experiencia de Internet completamente diferente. Pero incluso hoy puedes utilizarlo para encontrar la información que necesitas. Uno de los lugares que aún alberga el buscador Archie es la Universidad de Varsovia. Es verdad La mayoría de Los archivos encontrados por el servicio se remontan al año 2001.


A pesar de que Archie es buscador, ofrece algunas funciones para personalizar su búsqueda. Además de la posibilidad de especificar una base de datos (FTP anónimo o índice web polaco), el sistema ofrece varias opciones para interpretar la cadena introducida: como una subcadena, como una búsqueda textual o una expresión regular. Incluso tienes acceso a funciones para seleccionar un registro y tres opciones para cambiar las opciones de visualización de resultados: palabras clave, descripción o enlaces.


También hay varios parámetros de búsqueda opcionales que le permiten determinar con mayor precisión archivos necesarios. Es posible agregar palabras funcionales O y Y, limitando el área de búsqueda de archivos a una determinada ruta o dominio (.com, .edu, .org, etc.), así como estableciendo el número máximo de resultados devueltos.

Aunque Archie es un motor de búsqueda muy antiguo, todavía ofrece una funcionalidad de búsqueda bastante potente. el archivo deseado. Sin embargo, en comparación con los motores de búsqueda modernos, es extremadamente primitivo. Los "motores de búsqueda" han avanzado mucho: solo necesita comenzar a ingresar la consulta deseada y el sistema ya ofrece opciones de búsqueda. Sin mencionar los algoritmos de aprendizaje automático utilizados.

Hoy aprendizaje automático representa una de las partes principales los motores de búsqueda como Google o Yandex. Un ejemplo del uso de esta tecnología podría ser el ranking de búsqueda: ranking contextual, ranking personalizado, etc. En este caso se suelen utilizar sistemas Learning to Rank (LTR).

El aprendizaje automático también permite "comprender" las consultas ingresadas por el usuario. El sitio corrige la ortografía de forma independiente, procesa sinónimos, resuelve problemas de ambigüedad (lo que el usuario quería encontrar, información sobre el grupo Eagles o sobre las águilas). Los motores de búsqueda aprenden de forma independiente a clasificar sitios por URL (blog, recurso de noticias, foro, etc.), así como a los propios usuarios para crear una búsqueda personalizada.

El tatarabuelo de los motores de búsqueda.

Archie dio origen a motores de búsqueda como Google, por lo que, hasta cierto punto, se le puede considerar el tatarabuelo de los motores de búsqueda. De esto hace casi treinta años. Hoy en día, la industria de los motores de búsqueda gana aproximadamente 780 mil millones de dólares al año.

En cuanto a Alan Amtage, cuando se le pregunta sobre la oportunidad perdida de hacerse rico, responde con cierto grado de modestia. "Por supuesto que me gustaría hacerme rico", dice. - Sin embargo, incluso con las patentes emitidas, es posible que no me convierta en multimillonario. Es demasiado fácil cometer imprecisiones en las descripciones. A veces no gana el que fue primero, sino el que se convierte en el mejor”.

Google y otras empresas no fueron las primeras, pero superaron a sus competidores, creando una industria multimillonaria.



Hola centro.
Hace un par de meses recibí un pedido para desarrollar un sitio web. El sitio era una colección de artículos agregados por el usuario. uno de los puntos términos de referencia Fue la creación de una búsqueda. Porque Soy un gran admirador de reinventar las ruedas, se decidió no utilizar la búsqueda de Yandex o Google.

búsqueda regular

lo mas solución trivial Era dividir los artículos en palabras, dividir la consulta en palabras y buscar coincidencias.
Ventajas:

  • Alta velocidad. Podría usarse para esto de inmediato. tabla mysql con palabras
  • Sencillez. El guión para tal algoritmo ocuparía sólo unas pocas docenas de líneas.
  • baja precisión, falta de corrección de errores

Búsqueda borrosa

Entonces, se decidió hacer todo como lo hacen los “adultos”. Aquellos. Corrección automática de errores y búsqueda no solo por coincidencias exactas de palabras sino también por formas de palabras. Porque Quería más rendimiento, la búsqueda no estaba escrita en PHP, sino en Java, que constantemente colgaba en la memoria y almacenaba un índice de artículos.

tallo

Primero tuvimos que decidir cómo generalizar. Diferentes formas una palabra. Supondremos que palabras idénticas son palabras con la misma raíz. Pero extraer la raíz no es tarea fácil. Para resolver este problema, rápidamente busqué en Google el llamado "Potter Stemmer" (sitio web del autor). La lematizadora de Potter identifica la raíz de la palabra, que, sin embargo, no siempre coincide con la léxica. Además, fue escrito para idiomas diferentes, incluso para el ruso. Sin embargo, el ejemplo ruso está escrito en PHP y, al reescribirlo uno a uno en Java, obtuve un rendimiento muy pobre. El problema se resolvió utilizando expresiones regulares. Por el disgusto expresiones regulares Yo tomé ejemplo listo www.algorithmist.ru/2010/12/porter-stemmer-russian.html (Gracias al autor).
Como resultado, el rendimiento alcanzó el nivel de 1 millón de palabras por segundo.

Corregir errores tipográficos

A menudo sucede que el usuario comete un error al ingresar una solicitud. Por tanto, necesitamos un algoritmo para determinar la similitud de palabras. Hay muchos métodos para esto, pero el más rápido es el método de los 3 gramos. Su esencia es la siguiente: dividimos la palabra en tres letras sucesivas. Hacemos lo mismo con el segundo. Ejemplo:
Constitución => CON ONS NST STI TIT ITU TUTS UTSIYA
Constitución=> CON ONS NST STT TTU TUTS UTSIYA

Luego comparamos estos trillizos y cuantos más trillizos idénticos obtengamos, mayor será la similitud de las palabras.
En total tenemos 6 triples de 8, o el 75%.
Este método es bueno cuando falta o se agrega una letra adicional a la consulta. Pero cuando una persona reemplaza una letra por otra, inmediatamente obtenemos 3 tres. Sin embargo, normalmente una letra extra o faltante es un error tipográfico. Pero el reemplazado tiene un error ortográfico. ¿Qué tipo de errores son estos?

  • Reemplazo de a – o y o-a: maloko, pAbeda, rOdon
  • E-e, ee-e. Bida, Perog
  • Es incorrecto utilizar signos suaves y duros.

Por tanto, pongamos todo en una sola forma:

Reemplazo de cadena privada (palabra de cadena) ( palabra=palabra.reemplazar("a","o"); palabra=palabra.reemplazar("e","i"); palabra=palabra.reemplazar("b","p " "); palabra=palabra.reemplazar("d","t"); palabra=palabra.reemplazar("g","k"); palabra=palabra.reemplazar("w","sh"); = palabra.replace("ъ","ь"); palabra=palabra.replace("zh","w");

Por lo tanto, debemos revisar todas las palabras disponibles y encontrar la más similar. Con 1 millón de palabras, esto equivale aproximadamente a 1 s, lo cual no es aceptable. Optimicemos. Para empezar, supongamos que nos interesan palabras que difieren en longitud en un máximo de 2 letras. Luego notamos que desde tres cartas sólo hay 30.000 variaciones (33*33*33). Por lo tanto, hagamos un hash en la etapa de indexación y el algoritmo total quedará así:

Gramos de cadena = get3gram (palabra); int i=0; for (String gram:gramms) ( if (this.tgram_abc[i]==null) this.tgram_abc[i]=new ArrayList(); this.tgram_abc[i].add(id); i++; )

A continuación, haremos lo mismo con la palabra con letras "reducidas", luego reemplazaremos nn con n y la agregaremos a la tercera matriz, y finalmente eliminaremos todos los caracteres suaves.
Ahora puedes buscar palabras similares. Dividimos las palabras en gramos, buscamos el hash de cada triplete y obtenemos una lista de palabras en las que algunas se encuentran en posiciones similares.

HashMap GramBalls=nuevo HashMap(); int InicioG=(i-2>=0)?i-2:0; int FinG=(i+2); para (int l=len-2;l<=len+2;l++) for (int j=StartG;j<=EndG;j++) if (this.tgram_abc[l][j]!=null) for (int id:this.tgram_abc[l][j]) if (!GramBalls.containsKey(id)) GramBalls.put(id, (1-(double)Math.abs(len-l)/3) /(word.length()-2));

La última línea contiene una fórmula derivada al azar, lo que significa que el trigrama al final traerá la palabra 0,7 puntos/número de trigramas. Y el primero traerá 1 punto/cantidad de gramos.
Luego buscamos de manera similar la palabra "reducida" de la consulta y la palabra con nn reemplazado y signos suaves. Es cierto que en lugar de 1 habrá 0,7 y 0,3, respectivamente.
Luego ordenamos las palabras por puntos y seleccionamos la palabra con mayor número de puntos. Sin embargo, si el “campeón” tiene menos de 0,1 puntos, devolvemos nulo. Esto es necesario para evitar tener en cuenta palabras completamente diferentes. Porque El algoritmo anterior determina que “astronauta” y “asma” tienen una similitud de 0,05.

Mecanismo de indexación

Para los "adultos", la indexación se lleva a cabo mediante programas de araña especiales que rastrean periódicamente los sitios, indexan el contenido, buscan enlaces en la página y los siguen. Con nosotros todo es sencillo. Al agregar una página, el script php envía una solicitud a nuestro motor de búsqueda para indexar la página. A continuación, la página se limpia de etiquetas. Luego se divide en palabras. Después de esto, se determina el idioma de la palabra. Repasamos la palabra y por cada letra sumamos un punto para los idiomas que soportan ese carácter. En ruso es a-z y el guión “-”. Para inglés es a-z, un guión y un apóstrofe ('). Todos los símbolos y números se ponen en un "lenguaje simbólico" separado.
Para almacenamiento y búsqueda rápida, tenemos una variedad de listas de palabras.

Lista de arreglo WordIndex[idioma del texto][índice de texto del servicio][idioma de las palabras]

Esta lista almacena la posición de la palabra en el artículo y la identificación del artículo.
De manera similar, creamos una matriz para almacenar raíces de palabras.
A continuación, tomamos el título y lo indexamos como un texto más.

Mecanismo de búsqueda y clasificación.

Este es el mecanismo más importante de cualquier motor de búsqueda. La opinión de los usuarios depende de qué tan correctamente genere resultados.
Cuando el usuario hace clic en el botón de búsqueda, el script php reenvía la solicitud al motor de búsqueda. Lo descompone en palabras. Solo aquí hay una diferencia con la indexación. Si al agregar un artículo, cuando encontramos una palabra desconocida, la agregamos a la lista de palabras, cuando encontramos una palabra desconocida en una consulta, buscamos la más similar usando el método de los 3 gramos.
Después de dividir, para cada palabra obtenemos una lista de pares de identificación de texto - aparición de la palabra.
Determinemos qué tan apropiado es el artículo para la solicitud:

  1. Contemos cuántas palabras de las consultas hay en el artículo. (a)
  2. Contemos cuántas raíces de consulta hay en el artículo. (b)
  3. Contemos cuántas combinaciones de palabras hay similares a las combinaciones de palabras en la consulta (c)
  4. Contemos cuántas combinaciones de palabras de raíces hay similares a las combinaciones de palabras en la consulta (d)
  5. Determinemos cuántas palabras de la consulta aparecen en el artículo(e)
  6. Determinemos cuántas raíces hay a partir de la consulta (f)

Después de eso, sumaremos puntos a cada artículo de acuerdo con la siguiente fórmula:

Math.log(2*a+1)+ Math.log(2+1)+2+Math.log(c*5+1))+ Math.log(d*3+1)))*(f+ 2 *mi));

La fórmula fue creada de acuerdo con los siguientes principios:

  1. Las palabras tienen prioridad sobre las raíces.
  2. Las frases tienen prioridad sobre las palabras normales.
  3. Cuanto más detalladamente describa un artículo una consulta de búsqueda, mayor será su calificación. Además, la integridad es clave

A continuación repasemos los títulos, solo que ahí multiplicaremos los puntos por 10, porque… El título refleja la esencia del artículo.
Clasificamos y mostramos.
El algoritmo anterior procesa 100 solicitudes por segundo con un índice de 1000 artículos en un VPS con un procesador de 1 GHz.
PD Este artículo sólo sirve para presentar algunos algoritmos e ideas de búsqueda difusa.

Existe una idea errónea entre los desarrolladores web de que la animación CSS es la única forma productiva de animar en la web. Este mito ha llevado a muchos desarrolladores a abandonar por completo la animación basada en JavaScript. De este modo:

  1. Se obligó a gestionar interacciones complejas de la interfaz de usuario en hojas de estilo
  2. Nos bloqueamos para que no admitamos Internet Explorer 8 y 9
  3. Renuncia a la capacidad de crear física de movimiento, lo cual solo es posible en JavaScript

Verificación de la realidad: las animaciones basadas en JavaScript son tan rápidas como las animaciones basadas en CSS, a veces incluso más rápidas. La animación CSS generalmente solo tiene una ventaja sobre $.animate() de jQuery, que es inherentemente muy lenta. Sin embargo, las bibliotecas de animación JavaScript que omiten jQuery muestran un rendimiento increíble y evitan la manipulación DOM tanto como sea posible. Estas bibliotecas pueden ser hasta 20 veces más rápidas que jQuery.

Entonces, disipemos algunos mitos, profundicemos en algunos ejemplos de animación de la vida real y mejoremos nuestras habilidades de programación en el proceso. Si te encanta desarrollar animaciones UI prácticas para tus proyectos, entonces este artículo es para ti.

¿Por qué JavaScript?

Las animaciones CSS son útiles cuando necesitas realizar transiciones de propiedades en tus hojas de estilo. Además, ofrecen un rendimiento fantástico desde el primer momento, sin agregar una biblioteca a la página. Sin embargo, cuando usas transiciones CSS para potenciar un diseño de movimiento rico (como verás en versiones recientes de iOS y Android), se vuelven demasiado difíciles de administrar o su funcionalidad simplemente está plagada de errores.

En última instancia, las animaciones CSS te limitan a una especificación específica. En JavaScript, por la naturaleza misma de cualquier lenguaje de programación, tienes una cantidad infinita de control lógico. Los motores de animación JavaScript aprovechan este hecho para proporcionar nuevas funciones que le permiten hacer algunas cosas muy útiles:

Nota: Si está interesado en el tema del rendimiento, puede leer “CSS vs. Animación S: ¿cuál es más rápida?” y Jack Doyle: “Rompiendo el mito: animaciones CSS vs. JavaScript". Para demostraciones de rendimiento, consulte el panel de rendimiento en la documentación de Velocity y la demostración de GSAP "Biblioteca de comparación de velocidades".

Velocidad y GSAP

Las dos bibliotecas de animación JavaScript más populares son Velocity.js y GSAP. Ambos funcionan con y sin jQuery. No hay ninguna penalización en el rendimiento al usar estas bibliotecas con jQuery porque omiten por completo la pila de animación de jQuery.

Si jQuery está presente en su página, puede usar Velocity y GSAP como $.animate() de jQuery. Por ejemplo, $elemento.animate(( opacidad: 0.5 )); simplemente se convierte $elemento.velocity(( opacidad: 0.5 )).

Estas dos bibliotecas también funcionan cuando jQuery no está presente en la página. Esto significa que en lugar de encadenar la llamada de animación en un elemento de objeto jQuery, como se muestra simplemente, pasaría los elementos de destino a la llamada de animación:

1
2
3
4
5

/* Trabajando sin jQuery */

Velocidad (elemento, (opacidad: 0,5), 1000); //Velocidad

TweenMax.to(elemento, 1, (opacidad: 0,5)); // GSAP

Como puede ver, Velocity conserva la misma sintaxis que $.animate() de jQuery, incluso cuando se usa sin jQuery; simplemente mueva todos los parámetros a la posición correcta para crear espacio para pasar los elementos deseados en la primera posición.

GSAP, por otro lado, utiliza un diseño API orientado a objetos, así como métodos estáticos convenientes. De esta manera, podrás tener control total sobre las animaciones.

En ambos casos, ya no estás animando el objeto del elemento jQuery, sino el nodo DOM sin formato. Como recordatorio, puede acceder a los nodos DOM sin formato mediante document.getElementByID, document.getElementsByTagName, document.getElementsByClassName o document.querySelectorAll (que funciona igual para el mecanismo de selección de jQuery). Trabajaremos con estas funciones en la siguiente sección.

Trabajar sin jQuery

(Nota: si necesita una introducción básica a $.animate() de jQuery, consulte las primeras secciones de la documentación de Velocity).

Exploremos querySelectorAll porque esta es probablemente el arma que usarás al seleccionar elementos sin jQuery:

Como se muestra, simplemente pasa querySelectorAll un selector CSS (los mismos selectores que usarías en tus hojas de estilo) y devolverá todos los elementos coincidentes en una matriz. Por lo tanto puedes hacer esto:

1
2
3
4
5

/* Obtiene todos los elementos div. */
var divs = document.querySelectorAll("div");
/* Animar todos los divs a la vez. */
Velocidad (divs, (opacidad: 0,5), 1000); //Velocidad
TweenMax.to(divs, 1, (opacidad: 0,5)); // GSAP

Dado que ya no adjuntamos animaciones a objetos de elementos jQuery, es posible que se pregunte cómo podemos encadenar animaciones:

En Velocity, simplemente llamas las animaciones una por una:

/* Estas animaciones se convierten automáticamente en una cadena. */
Velocidad (elemento, (opacidad: 0,5), 1000);
Velocidad (elemento, (opacidad: 1), 1000);

No hay ninguna desventaja de rendimiento al animar esta ruta (el elemento que se está animando se almacena en caché en una variable, en lugar de tener que realizar repetidamente selecciones querySelectorAll en el mismo elemento).

(Sugerencia: con Velocity UI Pack, puede crear sus propias animaciones de llamadas múltiples y darles nombres personalizados que luego puede usar como primer parámetro de Velocity. Consulte la documentación de Velocity UI Pack para obtener más información).

La llamada al proceso a la vez de Velocity tiene una gran ventaja: si usa promesas con sus animaciones de Velocity, cada llamada de Velocity devolverá un objeto de promesa efectivo. Puede obtener más información sobre cómo trabajar con promesas en el artículo de Jake Archibald. Son increíblemente fuertes.

En el caso de GSAP, su expresiva API orientada a objetos le permite colocar sus animaciones en una línea de tiempo, lo que le brinda control sobre la programación y el tiempo. no estás limitado a animaciones en cadena; puedes anidar líneas de tiempo, hacer que las animaciones se superpongan, etc.:

La maravilla de JavaScript: flujo de trabajo

La animación es esencialmente un proceso experimental que requiere jugar con el tiempo y la relajación para lograr la sensación adecuada que necesita la aplicación. Por supuesto, incluso si cree que el diseño es excelente, el cliente a menudo solicitará cambios no triviales. En estas situaciones, el flujo de trabajo gestionado adquiere importancia.

Si bien las transiciones CSS son bastante fáciles de insertar en un proyecto para efectos como el desplazamiento, se vuelven inmanejables cuando intentas secuenciar incluso animaciones moderadamente complejas. Es por eso que CSS proporciona animación de fotogramas clave, que le permite agrupar la lógica de animación en secciones.

Sin embargo, el inconveniente básico de la API de fotogramas clave es que hay que definir secciones en términos porcentuales, lo cual no es intuitivo. Por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

@keyframes miAnimación (
0 % {
opacidad: 0;
transformar: escala(0, 0);
}
25 % {
opacidad: 1;
transformar: escala(1, 1);
}
50 % {
transformar: traducir(100px, 0);
}
100 % {
transformar: traducir (100px, 100px);
}
}

#caja (
animación: myAnimation 2,75 s;
}

¿Qué sucede si el cliente te pide que alargues un segundo más la animación de TranslateX? Esto requiere reconstruir las matemáticas y cambiar todos (o la mayoría) de los porcentajes.

Este material está dedicado a la animación en páginas HTML, el rendimiento de la animación, las perspectivas de uso, así como a la animación en aplicaciones y juegos móviles HTML5.

animación javascript

En primer lugar, comencemos mirando la animación JS en una página HTML. La animación en JavaScript se puede realizar con setInterval, con el que se pueden establecer fotogramas estáticos por segundo, o mediante una función normal que al final se llama a sí misma o con window.requestAnimationFrame.

Aquí está la lógica más simple de cómo funciona la animación en JS:

var el=document.getElementById("elem");
marzo=10; //datos iniciales estáticos
//el ciclo comienza
mar=mar+1;
el.style.marginLeft=mar+"px";
//el bucle termina

La belleza de JS es que puede ampliar cómodamente las herramientas nativas y utilizar, por ejemplo, animación jQuery o utilizar Velocity. Esto acelera significativamente la productividad. Sin embargo, en particular, Velocity no usa JS para la animación, sino que la animación en sí se realiza allí en CSS, lo cual se discutirá a continuación.

animación SVG

No podemos evitar mencionar la animación SVG. En sí es muy bueno, pero no funciona en navegadores móviles. O mejor dicho, sólo SMIL funciona en Android 3.0 o superior. Por desagradable que parezca decirlo, el propio SVG funciona en el método WebView, pero todo lo relacionado con la animación en esta etiqueta, por desgracia...

Dondequiera que trabaje, muestra un buen desempeño. Ver por ti mismo.


estilo="trazo:#ff0000; relleno: #0000ff">
nombreDeAtributo="transformar"
comenzar="0s"
dur="10s"
tipo = "rotar"
desde="0 60 60"
a="360 60 60"
repetirCount="indefinido"
/>

Una característica distintiva es que no hay píxeles dentro de SVG, sino algunos valores abstractos. Una vez que especifique la altura y el ancho del elemento svg, puede especificar un atributo de cuadro de vista, con el que puede ajustar la posición de los elementos internos y su tamaño relativo. SVG se puede hacer en cualquier largo y ancho y ajustará los objetos internos para que se ajusten al tamaño del cuadro de visualización.

Animación de lienzo

Este tipo de animación es muy común en los navegadores de las computadoras normales, particularmente cuando se crean juegos. Las desventajas son:

1. Falta de identificación DOM para elementos.

2. Cuanto mayor sea la resolución, menor será el rendimiento.

En los navegadores móviles, la animación del lienzo no funciona correctamente.

Animación CSS

Veamos la animación usando CSS3. Como sabes, en CSS3 llegamos a una sorprendente propiedad de animación con la que puedes animar completamente ciertos objetos.

¿Como sucedió esto? Por ejemplo, queremos mover el elemento #obj hacia la derecha 300 píxeles y moverlo hacia atrás, haciendo un bucle de la animación indefinidamente. Con CSS3 esto se ha convertido en una operación muy sencilla.

Además del ancho y alto estándar, asignamos las siguientes propiedades al objeto:

Webkit-animación: 3s en movimiento lineal infinito;
animación: 3s en movimiento lineal infinito;

Para una mayor compatibilidad entre navegadores, configuramos dos propiedades para el objeto, en las cuales 3s - 3 segundos para completar toda la animación, en movimiento - el nombre de la animación que se aplica al objeto (más detalles a continuación), lineal - una bandera que hace que el objeto se mueva a la misma velocidad en todas las áreas, infinito - bandera que hace que la animación sea infinita.

Bueno, ahora toquemos la animación en movimiento en sí. Deberá escribirse en el mismo archivo CSS donde lo aplique. Anteriormente, e incluso ahora, algunas personas usan los parámetros izquierda/derecha/arriba/abajo o margen para mover un objeto por la pantalla. En realidad, esta es una práctica bastante mala y no debe hacerse porque está un poco desoptimizada; puede lograr un movimiento más suave con otras propiedades de CSS3. Estas propiedades son Translatex y Translatey.

/*Mala animación*/
@-webkit-keyframes en movimiento (
desde (margen izquierdo: 0;)
50% (margen izquierdo: 300px;)
a (margen izquierdo: 0;)
}

/*Buena animación*/
@-webkit-keyframes en movimiento (
de (transformar: traducirx(0);)
50% (transformar: traducirx(300px);)
a (transformar: traducirx(0);)
}

También cabe señalar que la transición en eventos como el desplazamiento en el aire también se comporta muy bien en dispositivos móviles. Bueno, en general, puedes adjuntar la misma transición o animación CSS3 a cualquier elemento usando JS. En este caso, obtendrá la mejor opción (JS especifica qué animar, CSS anima).

Siendo este el caso, a la hora de crear juegos se suele utilizar frameworks y herramientas que facilitan el desarrollo. Uno de ellos es Sencha Animator, que te permite hacer varias cosas usando CSS y tiene una interfaz fácil de usar.

¿Qué es mejor y más rápido: animación CSS o animación JS?

Primero, podemos profundizar un poco más en la parte computacional para aclarar un poco la situación. Javascript es un lenguaje interpretado y para ejecutarlo, el motor JS del navegador tiene que analizar constantemente la instrucción (código) durante la ejecución y luego convertirlo en código legible por máquina. La situación con CSS es ligeramente diferente. El hecho es que se compila inmediatamente en lenguaje de máquina y, por lo tanto, muestra un mejor rendimiento en la animación.

La animación CSS por defecto es un orden de magnitud más productiva que Javascript, pero hay algunos matices cuando el uso de JS brinda una mayor ventaja de rendimiento.

Como se dijo en las últimas propuestas sobre animación CSS, es mejor usar CSS para procesar animaciones y JS para indicar qué procesar (simplemente colgando, por ejemplo, de un elemento de clase con las animaciones prescritas necesarias).

Era una cuestión de desempeño, la siguiente pregunta era la relevancia. A pesar de todos los aspectos aparentemente ventajosos de CSS, surgen situaciones en las que es mejor utilizar JS. Sucede.

Optimización del rendimiento de la animación

Si está creando una aplicación HTML 5 en Android, puede intentar lo siguiente:

Agregue android:hardwareAccelerated="true" a sus parámetros de actividad

Esto acelerará el hardware, la GPU, con esta opción habilitada, se pondrá a trabajar rápidamente y, junto con la CPU, estará completamente ocupada procesando su aplicación. El único inconveniente es que la duración de la batería será un poco más divertida.

Además, no utilice el evento onclick (aunque funcione en la pantalla táctil). El hecho es que este evento provoca un retraso de aproximadamente un tercio de segundo y, para evitarlo, es mejor utilizar ontouchstart y ontouchend.

Asegúrese de agregar y escribir en los comentarios lo que no se mencionó en el artículo. Juntos crearemos material de alta calidad en ruso.

Con la llegada de las animaciones CSS3, los documentos HTML se han vuelto mucho más atractivos y fáciles de desarrollar. Con la regla @keyframes, puede definir fácilmente varios parámetros, incluida la posición y el tamaño de un elemento HTML. El parámetro de animación, a su vez, se encarga de lanzar y mover fotogramas clave en función de determinados parámetros. Sin la necesidad de JavaScript ni complementos, podemos crear fácilmente incluso las animaciones más complejas que se ejecutarán sin problemas en todos los navegadores modernos.

Los problemas surgen cuando necesitas usar javascript para desarrollar animaciones CSS3. Todos sabemos que JavaScript en la mayoría de los casos es la primera necesidad que nos permite calcular valores individuales o el proceso de animación en su conjunto.

Combinando CSS y javascript usando el nuevo método animate()

El nuevo método javascript animate() nos permite controlar las animaciones a través de un script. Por supuesto, todavía necesitamos usar una gran cantidad de parámetros CSS para definir nuestros fotogramas clave.


(altura: "0"),
(altura: "100%)"
], {
duración: 3000,
iteración: 2,
retraso: 1000
});
En el ejemplo anterior, adjuntamos un método animate() al elemento. Dentro de los corchetes, definimos tantos estados de un parámetro dado como necesitemos, y en nuestro ejemplo trabajaremos en la altura. Cada valor se escribe como una letra de objeto y los valores se utilizan para un solo parámetro individual. No se permiten combinaciones como ancho y alto. Tenga en cuenta que los valores en sí deben estar entrecomillados y formateados con una sintaxis compatible con JavaScript, lo que significa usar "fondoColor" en lugar de "color de fondo". En otra letra del objeto, inmediatamente después de cerrar los corchetes, definimos más animación. Queremos cambiar la duración de la animación usando la duración, la frecuencia de las repeticiones usando la iteración y, opcionalmente, podemos definir un retraso usando el parámetro de retraso; este parámetro determina el momento en que debe comenzar la animación. Todos los valores de tiempo se especifican en milisegundos.

Gestionamos el conjunto de fotogramas clave y su duración.

Necesitamos ejecutar el método animate() por separado de cada parámetro que necesitemos cambiar. Esto significa que si queremos cambiar tanto el alto como el ancho, necesitaremos volver a ejecutar animate().

Document.getElementById("elemento").animate([
(ancho: "0", desplazamiento: 0),
(ancho: "10%", desplazamiento, 1/3),
(ancho: "100%", desplazamiento: 1)
], {
duración: 3000,
iteración: 2,
retraso: 1000
});
En el ejemplo anterior estamos cambiando el ancho del elemento. El ancho debe variar comenzando en 0, subiendo hasta el 10 por ciento y luego terminando cuando alcance el 100 por ciento. Todo esto irá acompañado de una animación fluida, por supuesto. El parámetro de compensación adicional especifica que los cambios del 0 al 10 por ciento tomarán 1/3 del tiempo total de la animación, y una transición de 10 a 100 tomará 2/3 del tiempo total de la animación. Y al mismo tiempo, la duración total de la animación está determinada por el parámetro de duración. En este caso, la primera parte se desarrollará en el transcurso de un segundo y la segunda, en el transcurso de 2.

En lugar de definir el valor como fracciones, también puedes usar decimales. Debes usar números del 0 al 1. Por ejemplo, en lugar de 1/3 puedes usar 0,33.

Más opciones de animación

Si está familiarizado con el parámetro de animación CSS3, probablemente sepa que el método animate() le permite controlar el proceso de animación. Puedes cambiar la dirección, así como la velocidad de la animación y su aceleración. Si deseas especificar que después de terminar, la animación debe volver al principio, puedes hacerlo.

Document.getElementById("elemento").animate([

], {
duración: 3000,
iteración: 2,
retraso: 1000,
dirección: "inversa",
flexibilización: "facilidad de entrada",
llenar: "hacia adelante"
});
El valor de dirección contiene información sobre la dirección de la animación. Si lo configura en reversa, la animación se reproducirá al revés. El valor alternativo le permitirá reproducir la animación en la dirección estándar y luego en la dirección opuesta. Y el valor alternativo-inverso combina los dos últimos valores.

El valor de aceleración le permite utilizar las funciones de modificación más comunes que ya son bien conocidas de CSS3, como puede encontrar facilidad de entrada, salida, etc. De forma predeterminada, cada animación está configurada para ejecutarse linealmente, sin aceleración ni desaceleración. El valor de relleno determina lo que se presentará una vez finalizada la animación. De forma predeterminada, la animación debería volver al punto de partida. Cuando se utiliza el valor de avance, la animación se detendrá en el último fotograma clave.

Control de animación

Usar animate() en una variable nos permite controlar la animación usando javascript. Podemos iniciarlo y detenerlo a nuestro propio criterio.

Animación var = document.getElementById("elemento").animate([
(altura: "0"),
(altura: "100%)"
], {
duración: 3000,
iteración: 2,
retraso: 1000
});

document.getElementById("animation_start").addEventListener("clic", función() (
animación.play();
), FALSO);

document.getElementById("animation_pause").addEventListener("clic", función() (
animación.pausa();
), FALSO);
En nuestro ejemplo, adjuntamos la animación a la variable de animación, por extraño que parezca. Luego adjuntamos 2 detectores de eventos a los elementos con id Animation_start y Animation_Pause. Estos oyentes se encargarán de realizar ciertas funciones cuando se haga clic en ellos. La reproducción inicia la animación, la pausa ya tiene claro lo que hace y la marcha atrás lo llevará inmediatamente al último fotograma clave y detendrá la animación por completo.

Hola, es javascript. Por supuesto, tenemos un detector de eventos que nos permite reaccionar hasta el final de la animación. Podemos implementar esto usando terminar. Acabado interior es necesario definir la función adecuada.

Animation.addEventListener("finalizar", función() (
alert("La animación ha finalizado.");
), FALSO);
En el ejemplo anterior, simplemente enviamos un mensaje indicando que la animación se completó.

Soporte del navegador

animate() se encuentra actualmente en desarrollo temprano y actualmente tiene la etiqueta "experimental". La compatibilidad con esta opción aparecerá en Chrome a partir de la versión 36. Si quieres probarlo ahora, puedes descargar e instalar Chrome Canary.




Arriba