Zobacz studia przypadków dotyczące przenoszenia kont

Swetha Gopalakrishnan
Swetha Gopalakrishnan
Saurabh Rajpal
Saurabh Rajpal

Przejścia między widokami to animowane i płynne przejścia między różnymi stanami strony internetowej lub interfejsu aplikacji. Interfejs View Transition API został zaprojektowany tak, aby umożliwić tworzenie tych efektów w prostszy i bardziej wydajny sposób niż było to możliwe wcześniej. Interfejs API zapewnia wiele korzyści w porównaniu z wcześniejszymi metodami JavaScriptu, m.in.:

  • Większa wygoda użytkowników: płynne przejścia i wizualne wskazówki ułatwiają użytkownikom poruszanie się po zmianach w interfejsie, dzięki czemu nawigacja jest bardziej naturalna i mniej chaotyczna.
  • Ciągłość wizualna: utrzymanie poczucia ciągłości między widokami zmniejsza obciążenie poznawcze i pomaga użytkownikom skupić się na aplikacji.
  • Wydajność: interfejs API stara się używać jak najmniej zasobów głównego wątku, co zapewnia płynniejsze animacje.
  • Nowoczesna estetyka: ulepszone przejścia zapewniają dopracowany i atrakcyjny interfejs.

Obsługa przeglądarek

  • Chrome: 111.
  • Edge: 111.
  • Firefox: nieobsługiwane.
  • Safari: 18.

Źródło

Ten post należy do serii, w której omawiamy, jak firmy zajmujące się e-commerce ulepszają swoje witryny za pomocą nowych funkcji CSS i interfejsu użytkownika. Z tego artykułu dowiesz się, jak niektóre firmy wdrożyły interfejs View Transition API i jak korzystały z niego.

redBus

redBus zawsze starał się, aby aplikacja natywne i wersja internetowa były jak najbardziej zbliżone do siebie. Przed wprowadzeniem interfejsu View Transition API implementowanie tych animacji w zasobach internetowych było trudne. Jednak dzięki interfejsowi API tworzenie przejść w ramach wielu ścieżek użytkownika jest intuicyjne, co sprawia, że korzystanie z internetu przypomina korzystanie z aplikacji. Wszystko to w połączeniu z zaletami dotyczącymi wydajności sprawia, że jest to funkcja niezbędna dla wszystkich witryn. – Amit Kumar, starszy menedżer ds. inżynierii, redBus.

Zespół wprowadził przejścia między widokami w kilku miejscach. Oto przykład połączenia animacji płynnego przejścia i wsuwania na ikonie logowania na stronie głównej.

Przejścia typu fade i slide w przypadku widoku, gdy użytkownik kliknie ikonę logowania na stronie głównej redBus.

Kod

Ta implementacja używa wielu elementów view-transition-name i animacji niestandardowych (scale-downscale-up). Użycie elementu view-transition-name z wartością unikalną oddziela element logowania od reszty strony, aby można było go animować osobno. Utworzenie nowego, niepowtarzalnego elementu view-transition-name powoduje też utworzenie nowego elementu ::view-transition-group w pseudoelementowym drzewie (widocznym w kodzie poniżej), dzięki czemu można nim manipulować niezależnie od domyślnego elementu ::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;
 }
}

Tokopedia

Zespół użył przejść między widokami, aby dodać animację zanikania, gdy użytkownik przełącza się między miniaturami produktów.

Implementacja jest bardzo prosta. Dzięki użyciu startViewTransition od razu uzyskujemy przyjemniejsze przejście z wygaszaniem niż w poprzedniej implementacji bez żadnych efektów.Andy Wihalim, starszy inżynier oprogramowania, Tokopedia.

Przed

Po

Kod

Ten kod korzysta z platformy React i zawiera kod związany z konkretną tą platformą, np. flushSync.Dowiedz się więcej o korzystaniu z platform do implementacji przejścia między widokami. Jest to podstawowe wdrożenie, które sprawdza, czy przeglądarka obsługuje startViewTransition. Jeśli tak, przeprowadza przejście. W przeciwnym razie stosowane jest zachowanie domyślne.

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

W swojej branży inwestycyjnej firma Policybazaar wykorzystała interfejs View Migrate API do pomocy w elementach pomocy takich jak „dlaczego warto kupić”, co sprawiło, że stały się one atrakcyjne wizualnie i były wygodniejsze w korzystaniu z takich funkcji.

Dzięki efektom przejścia widoku udało nam się wyeliminować powtarzalny kod CSS i JavaScript odpowiedzialny za zarządzanie animacjami w różnych stanach. Zaoszczędziliśmy w ten sposób czas potrzebny na rozwój i znacznie poprawiliśmy wrażenia użytkowników.—Aman Soni, Tech Lead, Policybazaar.

Wyświetl animację przejść z wezwaniem do działania „Dlaczego warto kupić od Policybazaar” na stronie z informacjami o inwestycji.

Kod

Poniższy kod jest podobny do poprzednich przykładów. Warto pamiętać, że można zastąpić domyślne style i animacje elementów ::view-transition-old(root)::view-transition-new(root). W tym przypadku domyślna wartość parametru animation-duration została zmieniona na 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;
}

Co należy wziąć pod uwagę podczas korzystania z interfejsu View Transition API

Jeśli na tej samej stronie używasz wielu efektów przejścia między widokami, zadbaj o to, aby każdy z nich miał inną nazwę przejścia widoku. Zapobiegnie to konfliktom.

Aktywne (przechodzenie) przejście widoku spowoduje dodanie nowej warstwy do pozostałej części interfejsu. Unikaj więc aktywowania przejścia po najechaniu kursorem, ponieważ zdarzenie mouseLeave zostanie uruchomione nieoczekiwanie (gdy kursor jeszcze się nie porusza).

Zasoby

Zapoznaj się z innymi artykułami z tej serii, aby dowiedzieć się, jak firmy e-commerce korzystały z nowych funkcji CSS i interfejsu, takich jak animacje sterowane przewijaniem, wyskakujące okienka, zapytania dotyczące kontenera i selektor has().