Посмотреть примеры переходов

Света Гопалакришнан
Swetha Gopalakrishnan
Саурабх Раджпал
Saurabh Rajpal

Переходы между представлениями — это анимированные и плавные переходы между различными состояниями веб-страницы или пользовательского интерфейса приложения. API для переходов между представлениями разработан для того, чтобы позволить создавать эти эффекты более простым и эффективным способом, чем это было возможно ранее. Этот API предлагает множество преимуществ по сравнению с предыдущими подходами JavaScript, включая:

  • Улучшенный пользовательский интерфейс: плавные переходы и визуальные подсказки помогают пользователям ориентироваться в изменениях пользовательского интерфейса, делая навигацию естественной и менее раздражающей.
  • Визуальная непрерывность: сохранение ощущения непрерывности между представлениями снижает когнитивную нагрузку и помогает пользователям ориентироваться в приложении.
  • Производительность: API старается использовать как можно меньше ресурсов основного потока, что обеспечивает более плавную анимацию.
  • Современная эстетика: улучшенные переходы способствуют созданию приятного и увлекательного пользовательского опыта.

Browser Support

  • Хром: 111.
  • Край: 111.
  • Предварительный просмотр технологии Firefox: поддерживается.
  • Сафари: 18.

Source

Эта публикация входит в серию статей о том, как компании электронной коммерции улучшили свои сайты, используя новые функции CSS и пользовательского интерфейса. В этой статье вы узнаете, как некоторые компании внедрили View Transition API и получили от него максимальную выгоду.

redBus

Компания redBus всегда стремилась к максимальному соответствию между своим нативным и веб-интерфейсом. До появления API View Transition реализация этих анимаций в наших веб-ресурсах была сложной задачей. Но с появлением API мы обнаружили, что создавать переходы между несколькими действиями пользователя интуитивно понятно, делая веб-интерфейс более похожим на приложение. Всё это в сочетании с повышением производительности делает эту функцию обязательной для всех веб-сайтов. — Амит Кумар , старший технический менеджер, redBus .

Команда реализовала переходы между представлениями в нескольких местах. Вот пример комбинации плавного появления и скольжения на значке входа на главной странице.

Плавные и скользящие переходы между видами, когда пользователь нажимает на значок входа на домашней странице redBus.

Код

В этой реализации используются несколько view-transition-name и пользовательские анимации ( scale-down и scale-up ). Использование view-transition-name с уникальным значением отделяет компонент входа от остальной страницы и анимирует его отдельно. Создание нового уникального view-transition-name также создаёт новую группу ::view-transition-group в дереве псевдоэлементов (показано в следующем коде), что позволяет управлять ею отдельно от группы по умолчанию ::view-transition-group(root) .

::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;
 }
}

Токопедия

Команда использовала переходы между представлениями, чтобы добавить анимацию затухания, когда пользователь переключается между миниатюрами продуктов.

Реализация настолько проста, что при использовании startViewTransition мы сразу получаем более приятный плавный переход по сравнению с предыдущей реализацией без каких-либо эффектов — Энди Вихалим , старший инженер-программист, Tokopedia .

До

После

Код

Следующий код использует фреймворк React и включает специфичный для него код, например, flushSync. Подробнее о работе с фреймворками для реализации переходов между представлениями читайте здесь. Это базовая реализация, которая проверяет, поддерживает ли браузер startViewTransition и если да, выполняет переход. В противном случае возвращается к поведению по умолчанию.

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})} />

Policybazaar

Инвестиционная вертикаль Policybazaar использовала API View Transition для элементов справки, таких как «почему купить», делая их визуально привлекательными и улучшая использование таких функций.

Внедрив View Transitions, мы избавились от повторяющегося кода CSS и JavaScript, отвечающего за управление анимацией в различных состояниях. Это сэкономило время разработки и значительно улучшило пользовательский опыт . — Аман Сони , технический руководитель, Policybazaar .

Посмотрите анимацию переходов в призыве к действию «Почему стоит покупать у Policybazaar» на странице листинга инвестиций.

Код

Следующий код аналогичен предыдущим примерам. Обратите внимание на возможность переопределения стилей и анимаций по умолчанию для ::view-transition-old(root) и ::view-transition-new(root) . В данном случае animation-duration по умолчанию была обновлена ​​до 0,4 с.

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;
}

Что следует учитывать при использовании View Transition API

При использовании нескольких эффектов перехода между представлениями на одной странице убедитесь, что для каждого эффекта или раздела задано отдельное имя перехода между представлениями, чтобы избежать конфликтов.

Пока переход вида активен (переход), он добавляет новый слой поверх остального пользовательского интерфейса. Поэтому избегайте срабатывания перехода при наведении курсора, поскольку событие mouseLeave сработает неожиданно (когда курсор ещё не двигается).

Ресурсы

Ознакомьтесь с другими статьями этой серии, в которых рассказывается о том, как компании электронной коммерции выиграли от использования новых функций CSS и пользовательского интерфейса, таких как анимация с помощью прокрутки, всплывающие окна, контейнерные запросы и селектор has() .