Añadir la barra de progreso NProgress.js en SvelteKit
Atención: este artículo ha sido actualizado para tener en cuenta los cambios importantes en la API de SvelteKit a partir de su versión @sveltejs/[email protected]
.
¿Conoces la popular librería NProgress.js
de Rico Sta. Cruz?
A nanoscopic progress bar. Featuring realistic trickle animations to convince your users that something is happening!
Puedes echar un vistazo a la documentación (muy sencilla) y probar la librería en su página.
Básicamente añade una barra de progreso a tu página, y tienes cuatro métodos disponibles para interactuar con la barra.
Cómo usarás NProgress.js
Excepto que quieras complicarte mucho la vida (la librería tiene métodos más avanzados que los que voy a mencionarte), el uso habitual es crear una ilusión de progreso.
Yo suelo usar NProgress.js en Next.js
para que el usuario vea que estamos navengando entre páginas, ya que no hay navegación real al ser todo client-side.
Así, cuando el usuario hace clic en un enlace local llamo a NProgress.start()
y la barra aparece y empieza a llenarse, con progresos aleatorios. Cuando se carga la nueva pantalla, llamo a NProgress.done()
y listo, la barra se llena y desaparece. Puedes verlo en acción en mi web Calendario de Aguas Abiertas.
Instalar NProgress.js en Sveltekit
Primero instalas el paquete:
npm i -D nprogress
Con esto tendrás disponibles los métodos mencionados.
Después, tienes que añadir el css
para la barra y el spinner opcional.
Para mantener un único archivo .css
en mi app SvelteKit, yo tomo todo el css
de la librería y lo pego al final de /src/app.css
que es la única hoja de estilos que importo en /src/routes/+layout.svelte
.
Cómo detectamos la navegación client-side en SvelteKit
El sistema que uso yo es el siguiente:
Como quiero que NProgress.js
se muestre en todas las páginas de mi web, yo lo añado directamente en /src/routes/+layout.svelte
, pero puedes hacerlo en la ruta que quieras:
<script>
// ...otros imports
import { navigating } from '$app/stores'; // readable store de SvelteKit
import NProgress from 'nprogress'; // métodos de NProgress.js
import '../app.css'; // el css de la app, el de NProgress.js incluido
// aquí usamos la store de SvelteKit
// para detectar inicio/fin de navegación:
$: {
if ($navigating) {
// $nativating es un objeto
Nprogress.start();
} else {
// $nativating es un null
NProgress.done();
}
}
</script>
Y listo. Cada vez que haces clic en un enlace local la barra superior aparece y se llena (rápidamente), creando la mencionada ilusión de navegación.
Si has implementado esta librería de esta manera, o de otra más avanzada, cuéntame!
No hay sección de comentarios, pero me encantaría escuchar tu opinión: escríbeme en Twitter y cuéntame!