¿Cómo implementar una pantalla de carga eficiente en tu proyecto web?
En el mundo del desarrollo web, tener una experiencia de usuario fluida es esencial. Implementar una estrategia de pantalla de carga es una herramienta poderosa que mejora la percepción del tiempo de espera durante el acceso a contenido o datos. En esta discusión, exploraremos cómo lograr un diseño eficiente de pantallas de carga, basándome en soluciones prácticas y eficientes que te motivarán a poner en práctica lo aprendido y seguir desarrollando tus habilidades.
¿Cómo se estructura el HTML para las pantallas de carga?
El diseño de una pantalla de carga comienza con HTML. En el ejemplo discutido aquí, se parte de una estructura simple que permite una fácil implementación de estas pantallas sin modificar el JavaScript.
Uso de divs para cargar contenido: Utilizando un contenedor div con clases específicas (e.g., MovieContainer-loading), se puede representar áreas que emulan imágenes o categorías mientras esperan la carga real. La estructura base queda comentada o simplificada para futuras modificaciones.
Flexibilidad con contenido "hardcoded": Elementos permanentes, como cabeceras o textos estáticos, permanecen sin cambios, ya que no necesitan pantallas de carga.
¿Cómo se utiliza CSS para animar las pantallas de carga?
Las animaciones en la pantalla de carga otorgan ese toque visual que indica al usuario que pronto habrá algo disponible, sin ser estáticas ni molestas.
Clases de estilo personalizadas: Usar clases como MovieContainer-loading permite establecer estilos básicos como un fondo gris y bordes redondeados que simulan bloques en donde las imágenes se presentarán luego.
Animación de opacidad: Una animación puede hacerse básica pero efectiva utilizando @keyframes, donde los cambios de opacidad (100%, 0%, 100%) se configuran en un segundo, lo que da un efecto de parpadeo sutil.
¿Cómo aseguramos que los datos reales reemplacen la pantalla de carga?
El paso crucial es la transición entre una pantalla de carga y el contenido real. Este proceso es manejado gracias a funciones JavaScript que limpian el contenedor provisional una vez que los datos concretos están listos.
Función createMovies: Una vez que los datos se recuperan de la API, se utiliza innerHTML = '' para limpiar el contenedor, eliminando cualquier resto de la pantalla de carga antes de insertar los datos reales.
functioncreateMovies(data){// Limpiar contenedor container.innerHTML='';// Lógica para insertar nuevas películas}
¿Qué retos se presentan durante la implementación?
La implementación puede tener diversas complejidades dependiendo del tipo de contenido que cargues y la red que utilices. Algunos retos incluyen:
Tiempo de carga variable: En redes lentas, la diferencia de percepción del usuario es más notable, haciendo clave la optimización de la pantalla de carga.
Compatibilidad y consistencia visual: Las animaciones deben ser sutiles y no interferir con otros elementos en distintas pantallas y dispositivos.
Con la estrategia y código correctos, implementar pantallas de carga puede ser una tarea sencilla que transforme la experiencia del usuario en algo más tolerable y visualmente organizado. Desde aquí, te invito a que explores tus propias estrategias y códigos para cuidar de la eficiencia en tu aplicación web. Recuerda, la simplicidad a veces es la clave para funcionalidades útiles y apreciadas. ¡Esperamos ver lo que creas!
intente hacerlo por mi mismo y fracase estrepitosamente
X2 lo importante es aprender de los errores :3
RT hermano
Yo agregué el loading skeleton para las cards, y para los otros datos dejé el spinner, también creé una pantalla de carga:
Pantalla de carga:
Skeleton y spinner:
Creo que más allá de elegir entre usar loading skeletons y loadinf spinners, cada tipo de laoding screens tiene su forma más común de usarse, he visto mucho que como dice el profe los loading skeletons se usan muchos cuando cargamos grillas con muchos elementos con imágenes, vídeos o tarjetas de información, en cambio los loadings spinners se usan mucho cuando queremos cargar un sólo componente con gran información. Por ejemplo.
.
.
Loading skeletons: grilla de card de vídeos en youtube
.
Loading spinners: toda la info de un curso en plazi
Quisiera mencionar también que, según lo que he leído, las investigaciones recientes sobre UX indican que cuando se utilizan loading skeletons la percepción del usuario es que el producto carga "más rápido"
siento que me complico demasiado... jajaj yo queriendo agregar todo con JS y el profe solo añadio mas html al index..
mi solucion era dinamicamente añadir el skeleton a lo que genera y con un setimeout quitar la propiedad css
la solución que habia pensado era a la clase de moviecontainer agregarle en el CSS esto:
Junto con replicar el HTML
.loading-skelenton{ border-radius: 8px; background-color:var(--grey);animation: skelenton; animation-duration: 3s; animation-iteration-count: infinite;}@keyframes skelenton{0%{ background-color:var(--grey);}50%{ background-color:var(--light-grey);}100%{ background-color:var(--grey);}}```
Pero la del profe obviamente es mucho más optima ! jeje
En las devtools, en la ruedita de settings, se van abajo de todo, tienen la opción de disable javascript, para no tener que estar recargando en el caso de que estén creando la animación
Lo hice!! jsjsj fue mas fácil de lo que creí :3
hola podrian ayudarme con esto, me pasa lo mismo y no se como solucionarlo.
Estoy tratando de resolver el problema del minuto 8:35, cuando se recarga la página en la vista de detalles, por un instante deja ver la vista del home en modo pantalla de carga y luego pasa a mostrar la vista de detalles de película en modo pantalla de carga que es el objetivo en ese momento. La cosa es que alguien podría notar que al recargar aparecen cosas que no son de esa vista en un instante. Al momento he fallado en cada cosa que intento, como ponerle un display none a las secciones del home cuando estoy en otra vista antes de recibir el evento DOMContentLoaded.
Me pasa lo mismo. Ya lo solucionaste?
Tengo que decir que no mereció la pena porque tardaba casi lo mismo en cargar mi imagen que en volver con la respuesta del API, pero lo que yo intenté fue esto:
Honestamente, creo que, es una forma "sutil" de aplicar la carga. Pude ver otras formas ( otros tutoriales), y no son muy sutiles. Sin embrago, lo bueno del código, es que existen varias formas de hacerlo.
Total yo me puse a averiguar e intente agregarlo con JS incluso jaja luego vi este video y mi frustracion fue como, It's easy !! y yo dure media tarde :C
Yo lo pense diferente y use muchos backgrounds, creo que me falta más creatividad pero que CAPO es este profe !!
Lo intente pero no progrese u.U
Tengo dos dudas y es que no se si haya una forma de "controlar" que archivos se carguen primero es decir si quiero que cargue primero determinado html, css (en caso de tener varios).
Y la otra duda es que si dentro de un archivo hay igualmente una forma de controlar que se cargue algo primero, ya que en mi app al momento de cargar la pagina de la película, antes de eso se carga otras secciones (categories, tendencias), y después se carga la página que corresponde
Y eso que ya le coloqué un loading skeleton, pero antes de que se carguen los estilos de ese skeleton, se carga y se visualiza primero esa estructura que se ve en la img en los primeros 2s. Por eso mi pregunta si no hay alguna forma de controlar eso