Плавна навігація, схожа на у додатках, завдяки API View Transitions у Next.js
Використовуйте API View Transitions разом із навігацією в Next.js для анімації спільних елементів без необхідності використання важких бібліотек анімацій.
API View Transitions дозволяє браузерам анімувати перехід між станами DOM з меншою кількістю власних механізмів анімації. У проектах Next.js App Router він природно поєднується з клієнтськими навігаціями, коли потрібна безперервність спільних елементів замість різких переходів.
Що це таке
Це функція браузера, яка створює знімки старого та нового станів та інтерполює між ними. Ви самі вирішуєте, чи активувати її, називаєте спільні елементи та за потреби налаштовуєте їх за допомогою CSS.
function navigateWithTransition(callback: () => void) {
if (!document.startViewTransition) {
callback();
return;
}
document.startViewTransition(() => {
callback();
});
}
Чому це підходить для Next.js
Перехід між маршрутами на клієнтській стороні вже замінює складні структури відображення. View Transitions надають цьому процесу візуальну форму, яку користувачі асоціюють із нативними додатками.
Підтримка браузерів та поліфіли
Підтримка покращується, але ще не є універсальною. Вирішіть, чи використовувати прогресивне покращення чи поліфіли; поліфіли збільшують об’єм коду та не забезпечують ідеальної точності відтворення.
"use client";
import { useRouter } from "next/navigation";
export function TransitionLink() {
const router = useRouter();
function navigate() {
if (!document.startViewTransition) {
router.push("/dashboard");
return;
}
document.startViewTransition(() => {
router.push("/dashboard");
});
}
return (
<button onClick={navigate}>
Dashboard
</button>
);
}
Шаблони інтеграції
Увімкніть переходи під час навігації, позначте спільні елементи стабільними іменами та запобігайте різким змінам макету за допомогою резервованого простору.
.product-image {
view-transition-name: product-image;
}
Налаштування анімації
Псевдоселектори view-transition у CSS дозволяють налаштовувати тривалість та характер анімації. Віддавайте перевагу непомітним рухам; довгі анімації здаються повільнішими, ніж є насправді.
::view-transition-old(root),
::view-transition-new(root) {
animation-duration: 350ms;
}
::view-transition-old(root) {
animation: fade-out 350ms ease;
}
::view-transition-new(root) {
animation: fade-in 350ms ease;
}
Проблеми, стрімінг, продуктивність
Уникайте анімування елементів, які завантажуються пізно або сильно змінюють розмір. Тестуйте роботу на повільних мережах. Віддавайте перевагу властивостям, які добре піддаються трансформації. Якщо відбувається некоректне стрімінгу знімків, відкладіть переход або обмежте його лише статичним елементом.
Використовуйте переходи між екранами, коли важлива безперервність навігації та браузери вашої аудиторії це підтримують. Уникайте їх, коли інтенсивність інформації змінюється швидше, ніж анімація може цьому допомогти. Зберігайте конфігурації у стані «зеленому», вимірюйте кожну стадію окремо та не поспішайте з випуском, спираючись лише на інтуїцію, адже наступна версія може знову ввести той самий прихований модус несправності під новою назвою. Зберігайте конфігурації у стані «зеленому», вимірюйте кожну стадію окремо та не поспішайте з випуском, спираючись лише на інтуїцію, адже наступна версія може знову ввести той самий прихований модус несправності під новою назвою. Зберігайте конфігурації у стані «зеленому», вимірюйте кожну стадію окремо та не поспішайте з випуском, спираючись лише на інтуїцію, адже наступна версія може знову ввести той самий прихований модус несправності під новою назвою. Зберігайте конфігурації у стані «зеленому», вимірюйте кожну стадію окремо та не поспішайте з випуском, спираючись лише на інтуїцію, адже наступна версія може знову ввести той самий прихований модус несправності під новою назвою. Зберігайте конфігурації у стані «зеленому», вимірюйте кожну стадію окремо
Зберігайте пристрої у справному стані, вимірюйте кожну стадію окремо та не поспішайте з випуском, спираючись лише на інтуїцію, адже наступна версія може знову ввести той самий прихований режим несправності під новою назвою.У наступній версії можна знову ввести той самий беззвучний режим збою під новою назвою. Зберігайте фіксатури у стані „зеленому“, вимірюйте кожну стадію окремо та не дозволяйте випуску продукту лише на основі інтуїції, коли наступна версія може знову ввести той самий беззвучний режим збою під новою назвою. Зберігайте фіксатури у стані „зеленому“, вимірюйте кожну стадію окремо та не дозволяйте випуску продукту лише на основі інтуїції, коли наступна версія може знову ввести той самий беззвучний режим збою під новою назвою. Зберігайте фіксатури у стані „зеленому“, вимірюйте кожну стадію окремо та не дозволяйте випуску продукту лише на основі інтуїції, коли наступна версія може знову ввести той самий беззвучний режим збою під новою назвою. Зберігайте фіксатури у стані „зеленому“, вимірюйте кожну стадію окремо та не дозволяйте випуску продукту лише на основі інтуїції, коли наступна версія може знову ввести той самий беззвучний режим збою під новою назвою. Зберігайте фіксатури у стані „зеленому“, вимірюйте кожну стадію окремо та не дозволяйте випуску продукту лише на основі інтуїції, коли наступна версія може знову ввести той самий беззвучний режим збою під новою назвою.Режим збою у тихому режимі під новою назвою.