Las transiciones de vistas son transiciones animadas y fluidas entre diferentes estados de una página web o de la IU de una aplicación. La API de View Transition se diseñó para permitirte crear estos efectos de una manera más sencilla y eficaz que antes. La API ofrece varios beneficios en comparación con los enfoques anteriores de JavaScript, incluidos los siguientes:
- Experiencia del usuario mejorada: Las transiciones fluidas y las señales visuales guían a los usuarios a través de los cambios en la IU, lo que hace que la navegación se sienta natural y menos molesta.
- Continuidad visual: Mantener un sentido de continuidad entre las vistas reduce la carga cognitiva y ayuda a los usuarios a mantenerse orientados dentro de la aplicación.
- Rendimiento: La API intenta usar la menor cantidad posible de recursos de subprocesos principales, lo que crea animaciones más fluidas.
- Estética moderna: Las transiciones mejoradas contribuyen a una experiencia del usuario mejorada y atractiva.
Esta publicación es parte de una serie en la que se analiza cómo las empresas de comercio electrónico mejoraron su sitio web con nuevas funciones de IU y CSS. En este artículo, descubrirás cómo algunas empresas implementaron la API de View Transition y se beneficiaron de ella.
redBus
redBus siempre ha tratado de crear la mayor paridad posible entre sus experiencias nativas y web. Antes de la API de View Transition, era un desafío implementar estas animaciones en nuestros recursos web. Sin embargo, con la API, nos pareció intuitivo crear transiciones en varios recorridos del usuario para que la experiencia web sea más parecida a una app. Todo esto, junto con los beneficios de rendimiento, la convierten en una función imprescindible en todos los sitios web: Amit Kumar, gerente de ingeniería sénior de redBus.
El equipo implementó transiciones de vista en varios lugares. A continuación, se muestra un ejemplo de una combinación de animación de fundido y deslizamiento de entrada en el ícono de acceso de la página principal.
Código
Esta implementación usa animaciones de varios view-transition-name
y personalizadas (scale-down
y scale-up
). Si usas view-transition-name
con un valor único, se separa el componente de acceso del resto de la página para animarlo por separado. Cuando creas un nuevo view-transition-name
único, también se crea un nuevo ::view-transition-group
en el árbol de seudoelemento (que se muestra en el siguiente código), lo que permite que se manipule por separado de la ::view-transition-group(root)
predeterminada.
::view-transition
├─::view-transition-group(root)
│ └─…
├─::view-transition-group(signin)
│ └─…
└─::view-transition-group(signinclose)
└─…
//Code for VT for login
if (!document.startViewTransition) {
this.setState(
{
closeSigninModal: condition ? true : false
},
() => {
if (closeSigninCb) {
closeSigninCb();
}
}
);
} else {
const transition = document.startViewTransition();
transition.ready.finally(() => {
setTimeout(() => {
this.setState(
{
closeSigninModal: condition ? true : false
},
() => {
if (closeSigninCb) {
closeSigninCb();
}
}
);
}, 500);
});
}
.signin_open {
view-transition-name: signin;
}
.signin_close {
view-transition-name: signinclose;
}
::view-transition-group(signin),
::view-transition-group(signinclose) {
animation-duration: 0.5s;
}
::view-transition-old(signin) {
animation-name: -ua-view-transition-fade-out, scale-down;
}
::view-transition-new(signin) {
animation-name: -ua-view-transition-fade-in, scale-up;
}
::view-transition-new(signinclose) {
animation-name: -ua-view-transition-fade-out, scale-down;
}
@keyframes scale-down {
to {
scale: 0;
}
}
@keyframes scale-up {
from {
scale: 0;
}
}
Tokopedia
El equipo usó transiciones de vista para agregar una animación de atenuación cuando el usuario alterna entre miniaturas de productos.
La implementación es tan fácil que, cuando usas
startViewTransition
, se obtiene de inmediato una transición de atenuación más agradable en comparación con la implementación anterior sin ningún efecto. Andy Wihalim, ingeniero de software sénior de Tokopedia.
Antes
Después
Código
En el siguiente código, se usa un framework de React y se incluye código específico del framework, como flushSync.
Obtén más información sobre cómo trabajar con frameworks para implementar transiciones de vistas.
Esta es una implementación básica que verifica si el navegador admite startViewTransition
y, de ser así, realiza la transición. De lo contrario, recurre al comportamiento predeterminado.
const handleClick =
({ url, index }) =>
() => {
if ('startViewTransition' in document) { //check if browser supports VT
document.startViewTransition(() => {
flushSync(() => {
setDisplayImage({ url, index });
setActiveImageIndex(index);
});
});
} else { //if VT is not supported, fall back to default behavior
setDisplayImage({ url, index });
setActiveImageIndex(index);
}
};
...
<Thumbnail onClick={handleClick({url, index})} />
Bazar de políticas
La vertical de inversión de Policybazaar usó la API de View Transition en elementos de sugerencia de ayuda, como “por qué comprar”, lo que los hace visualmente atractivos y mejora el uso de esas funciones.
Con la incorporación de las transiciones de vistas, eliminamos el código CSS y JavaScript repetitivos que se encarga de administrar animaciones en varios estados. Esto ahorró el esfuerzo de desarrollo y mejoró significativamente la experiencia del usuario: Aman Soni, líder técnico de Policybazaar.
Código
El siguiente código es similar a los ejemplos anteriores. Ten en cuenta que puedes anular los estilos y las animaciones predeterminados de ::view-transition-old(root)
y ::view-transition-new(root)
. En este caso, el valor predeterminado animation-duration
se actualizó a 0.4 s.
togglePBAdvantagePopup(state: boolean) {
this.showPBAdvantagePopup = state;
if(!document.startViewTransition) {
changeState();
return;
}
document.startViewTransition(() => {changeState();});
function changeState() {
document.querySelector('.block_section').classList.toggle('hide');
document.querySelector('.righttoggle_box').classList.toggle('show');
}
}
.righttoggle_box{
view-transition-name: advantage-transition;
}
.block_section{
view-transition-name: advantage-transition;
}
::view-transition-old(root), ::view-transition-new(root) {
animation-duration: 0.4s;
}
Aspectos que debes tener en cuenta cuando usas la API de transición de vistas
Cuando uses varios efectos de transición de vistas en la misma página, asegúrate de tener un nombre de transición de vista diferente para cada efecto o sección, a fin de evitar conflictos.
Mientras una transición de vistas esté activa (en transición), agregará una nueva capa sobre el resto de la IU. Por lo tanto, evita que se active la transición cuando se coloca el cursor sobre un elemento, ya que el evento mouseLeave
se activará de forma inesperada (cuando el cursor real aún no se mueve).
Recursos
- Transiciones fluidas y simples con la API de View Transition
- Explicación: Visualiza las transiciones de la MPA
- Caso de éxito: La navegación fluida es posible gracias a las transiciones de vistas
- Caso de éxito: ¿La Web puede hacer qué? | Ofrece navegaciones similares a las de una aplicación.
- Propuesta de interoperabilidad: Permite que las transiciones de vistas estén disponibles en todos los navegadores
- ¿Quieres informar un error o solicitar una función nueva? Nos gustaría conocer tu opinión sobre SPA y MPA.
Explora los otros artículos de esta serie sobre cómo las empresas de comercio electrónico se beneficiaron del uso de nuevas funciones de IU y CSS, como animaciones basadas en desplazamientos, ventanas emergentes, consultas de contenedores y el selector has()
.