Introducci贸n
Una de las claves para una buena experiencia de usuario en aplicaciones web es la suavidad en las transiciones entre p谩ginas. Con la nueva API nativa de transiciones de vista (View Transitions API), los desarrolladores pueden crear transiciones m谩s fluidas y nativas entre p谩ginas. En este post, exploraremos c贸mo integrar esta API en una aplicaci贸n Next.js.
驴Qu茅 es la API de Transiciones de Vista?
La API de Transiciones de Vista es una nueva especificaci贸n que permite a los desarrolladores crear transiciones fluidas y nativas entre diferentes estados de la aplicaci贸n, mejorando la experiencia del usuario sin recurrir a bibliotecas pesadas o complejas.
Implementaci贸n en Next.js
1. Configuraci贸n Inicial
Primero, aseg煤rate de que tu entorno de desarrollo est谩 listo y que tienes una aplicaci贸n Next.js configurada.
2. Modificar _app.tsx
para Utilizar la API de Transiciones de Vista
Vamos a utilizar el evento routeChangeStart
para iniciar la transici贸n y routeChangeComplete
para finalizarla.
import { AppProps } from 'next/app';
import { useRouter } from 'next/router';
import { useEffect } from 'react';
import '../styles/globals.css';
function MyApp({ Component, pageProps }: AppProps) {
const router = useRouter();
useEffect(() => {
const handleRouteChange = () => {
if (document.startViewTransition) {
document.startViewTransition(() => Promise.resolve());
}
};
router.events.on('routeChangeStart', handleRouteChange);
return () => {
router.events.off('routeChangeStart', handleRouteChange);
};
}, [router]);
return <Component {...pageProps} />;
}
export default MyApp;
3. Personalizar las Transiciones
Puedes personalizar las transiciones utilizando CSS para definir c贸mo se ver谩n las animaciones. Por ejemplo:
/* styles/globals.css */
body {
transition: opacity 0.3s ease-in-out;
}
body.transitioning {
opacity: 0.5;
}
4. Aplicar Estilos durante las Transiciones
Utiliza JavaScript para agregar y remover la clase transitioning
durante las transiciones de p谩gina:
const handleRouteChange = () => {
document.body.classList.add('transitioning');
if (document.startViewTransition) {
document.startViewTransition(() => {
document.body.classList.remove('transitioning');
return Promise.resolve();
});
} else {
document.body.classList.remove('transitioning');
}
};
Ejemplo Completo de _app.tsx
import { AppProps } from 'next/app';
import { useRouter } from 'next/router';
import { useEffect } from 'react';
import '../styles/globals.css';
function MyApp({ Component, pageProps }: AppProps) {
const router = useRouter();
useEffect(() => {
const handleRouteChangeStart = () => {
document.body.classList.add('transitioning');
if (document.startViewTransition) {
document.startViewTransition(() => Promise.resolve());
}
};
const handleRouteChangeComplete = () => {
document.body.classList.remove('transitioning');
};
router.events.on('routeChangeStart', handleRouteChangeStart);
router.events.on('routeChangeComplete', handleRouteChangeComplete);
return () => {
router.events.off('routeChangeStart', handleRouteChangeStart);
router.events.off('routeChangeComplete', handleRouteChangeComplete);
};
}, [router]);
return <Component {...pageProps} />;
}
export default MyApp;
Conclusi贸n
La API de Transiciones de Vista proporciona una forma poderosa y nativa de mejorar la experiencia del usuario con transiciones fluidas entre p谩ginas. Implementarla en tu aplicaci贸n Next.js es sencillo y puede marcar una gran diferencia en la percepci贸n de calidad y rendimiento de tu sitio web.
Espero que este post te haya sido 煤til.