Quiero tener una página web que tenga una palabra centrada.
Quiero que esta palabra se dibuje con una animación, de modo que la página "escriba" la palabra de la misma manera que lo haríamos, es decir, comienza en un punto y dibuja líneas y curvas con el tiempo de modo que el resultado final sea un glifo.
No me importa si esto se hace con <canvas>
DOM o no, y no me importa si se hace con JavaScript o CSS. La ausencia de jQuery sería agradable, pero no es obligatorio.
¿Cómo puedo hacer esto? He buscado exhaustivamente sin suerte.
javascript
css
canvas
html5-canvas
css-shapes
Strugee
fuente
fuente
Respuestas:
Versión de lona
Esto dibujará caracteres individuales más como uno escribiría a mano. Utiliza un patrón de guión largo donde el orden de encendido / apagado se intercambia con el tiempo por char. También tiene un parámetro de velocidad.
Ejemplo de animación (ver demo a continuación)
Para aumentar el realismo y la sensación orgánica, agregué un espaciado aleatorio de letras, un desplazamiento y delta, transparencia, una rotación muy sutil y finalmente uso una fuente ya "escrita a mano". Estos pueden envolverse como parámetros dinámicos para proporcionar una amplia gama de "estilos de escritura".
Para una apariencia aún más realista, se requerirían los datos de ruta que no son por defecto. Pero este es un código corto y eficiente que se aproxima al comportamiento escrito a mano y fácil de implementar.
Cómo funciona
Al definir un patrón de guión, podemos crear hormigas marchantes, líneas punteadas, etc. Aprovechando esto definiendo un punto muy largo para el punto "apagado" y aumentando gradualmente el punto "encendido", dará la ilusión de dibujar la línea cuando se acaricia mientras se anima la longitud del punto.
Dado que el punto de desconexión es tan largo, el patrón repetitivo no será visible (la longitud variará con el tamaño y las características del tipo de letra utilizado). La ruta de la letra tendrá una longitud, por lo que debemos asegurarnos de que cada punto cubra al menos esta longitud.
Para las letras que consisten en más de una ruta (por ejemplo, O, R, P, etc.) como una es para el contorno, una es para la parte hueca, las líneas aparecerán dibujadas simultáneamente. No podemos hacer mucho al respecto con esta técnica, ya que requeriría el acceso a cada segmento de ruta para ser trazado por separado.
Compatibilidad
Para los navegadores que no admiten el elemento de lienzo, se puede colocar una forma alternativa de mostrar el texto entre las etiquetas, por ejemplo, un texto con estilo:
Manifestación
Esto produce el trazo animado en vivo ( sin dependencias ):
fuente
Editar 2019
Creé una biblioteca de JavaScript que puede crear animaciones realistas. Es fácil de usar y requiere un archivo JSON especial que actúe como fuente.
Pedido de la página de Github para la documentación y ejemplos. Y Codepen
Respuesta anterior
El siguiente ejemplo usa snap.js para crear dinámicamente
tspan
elementos y luego animar cada uno de ellosstroke-dashoffset
.Mostrar fragmento de código
Respuesta anterior
Puedes hacer algo como esto usando svg's
stroke-dasharray
Mostrar fragmento de código
Sin
keyframes
animación puedes hacer algo como estoMostrar fragmento de código
Y para el soporte de IE puede usar jquery / javascript
Mostrar fragmento de código
fuente
$(this).css('fill', 'red')
como una devolución de llamada a la animaciónSolo CSS:
fuente
Después de muchas pruebas, aquí hay algunas notas. El objetivo es mostrar datos de texto rápidos de la forma menos bloqueante, en páginas pesadas DOM que requieren interacciones de los usuarios.
Por supuesto, hay muchas formas de lograr lo mismo. En este ejemplo, las diferencias pueden no ser obvias, realmente se aplican a interfaces complejas.
Más lento :
innerHTML
y estilo en línea. El DOM se recalcula en cada iteración. El navegador está trabajando duro para mantener el tren. Fallará rápidamente, causando pérdidas de memoria y congelaciones:Mucho mejor : El uso
textContent
,requestAnimationFrame
y la API de animación web. Esto va mucho más suave, es obvio en páginas pesadas DOM. Las interacciones del usuario no bloquearán los repintes. Se pueden omitir algunas reparaciones para mantener la interfaz bien receptiva.En el ejemplo anterior, el DOM todavía se está recalculando para el desbordamiento de texto. Podemos ver que el depurador parpadea con fuerza. ¡Esto realmente importa en los elementos en cascada! Esto todavía puede ralentizar javascript y los desplazamientos de los usuarios.
Potencia total : es posible usar css solo para actualizar los datos con la
content
regla css y las variables css. El texto no será seleccionable.Mis pruebas muestran grandes mejoras, el motor de JavaScript se salta rápidamente en otras tareas. A veces puede comenzar un poco más lento que el ejemplo anterior. Pero además de eso, esto no bloquea los desplazamientos de los usuarios, y al depurador también le gusta, no más saltos.
fuente