AMP

Animowanie elementów

Możesz dodatkowo wzbogacić relację internetową poprzez zastosowanie animowanych wejść do elementów wewnątrz strony. Możesz na przykład sprawić, że Twój tytuł wleci z lewej strony albo spadnie na stronę, albo stopniowo się pojawi itd. Framework relacji AMP zawiera następujące wstępnie ustawione animacje do użytku w relacji internetowej:

Wstępne ustawienie animacji Domyślny czas trwania (ms) Domyślne opóźnienie (ms)
drop 1600 0
fade-in 500 0
fly-in-bottom 500 0
fly-in-left 500 0
fly-in-right 500 0
fly-in-top 500 0
pulse 500 0
rotate-in-left 700 0
rotate-in-right 700 0
twirl-in 1000 0
whoosh-in-left 500 0
whoosh-in-right 500 0
pan-left 1000 0
pan-right 1000 0
pan-down 1000 0
pan-up 1000 0
zoom-in 1000 0
zoom-out 1000 0

Aby zastosować wejście do animacji do elementu, należy określić atrybut animate-in="<animation preset>" za pomocą jednej z wstępnie ustawionych wartości animacji. Aby na przykład upuścić tekst na stronę, dodaj atrybut animate-in="drop" do elementu tekstowego:

<amp-story-page id="page3">
  ...
  <amp-story-grid-layer template="vertical">
    <p animate-in="drop">Drop this text into the page</p>
</amp-story-page>

Poznaj różne efekty animacji, dodając do elementów na stronach swojej relacji atrybut animate-in="<wstępne ustawienie animacji>".

Synchronizowanie animacji

Każde ustawienie wstępne animacji ma wbudowane następujące domyślne wartości czasu:

  • delay: jest to czas opóźnienia rozpoczęcia animacji. Na przykład wartość delay równa .3s znaczy, że animacja wchodzi na stronę po 0,3 sekundy. Opóźnienie 0s powoduje natychmiastowe uruchomienie animacji.
  • duration: jest to czas trwania wyświetlania animacji. Na przykład, animacja stopniowego wyświetlania trwa od początku do końca 500 ms.

Możesz dostosować synchronizację animacji poprzez zmianę opóźnienia lub czasu trwania za pomocą atrybutów animate-in-delay oraz animate-in-duration. W poniższym przykładzie, my-element wlatuje od lewej strony po 0,3 sekundy i całkowicie wyświetlany jest wlatuje w ciągu 0,5 sekundy:

<amp-story-page id="my-page">
  ...
  <p
    class="my-element"
    animate-in="fly-in-left"
    animate-in-delay="0.3s"
    animate-in-duration="0.5s"
  >
    I'm going to fly into the page from the left!
  </p>
</amp-story-page>

Animowanie ostatniej strony

Ostatnia strona naszej relacji internetowej składa się z dwóch warstw: pierwsza warstwa jest kolażem zdjęć zwierząt, a druga wyświetla tekst banera. Aby utworzyć tę stronę, dodaj następujący kod zaraz po poprzedniej stronie relacji:

<amp-story-page id="page5">
  <amp-story-grid-layer template="vertical" class="noedge">
    <div class="wrapper">
      <amp-img
        src="assets/cat.jpg"
        width="720"
        height="1280"
        layout="responsive"
      >
      </amp-img>
      <amp-img
        src="assets/dog.jpg"
        width="720"
        height="1280"
        layout="responsive"
      >
      </amp-img>
      <amp-img
        src="assets/bird.jpg"
        width="720"
        height="1280"
        layout="responsive"
      >
      </amp-img>
      <amp-img
        src="assets/rabbit.jpg"
        width="720"
        height="1280"
        layout="responsive"
      >
      </amp-img>
    </div>
  </amp-story-grid-layer>
  <amp-story-grid-layer template="vertical" class="center-text">
    <p class="banner-text">Pets can lower your stress levels!</p>
  </amp-story-grid-layer>
</amp-story-page>

Załaduj ponownie relację AMP w przeglądarce, a następnie sprawdź, czy strona renderowana jest prawidłowo i wygląda tak:

Wygląda świetnie, ale wszystko jest statyczne! Ożywmy ją animacją!

Zaczniemy od animacji wejścia tekstu bannera „whoosh in” z prawej strony. Dodaj atrybut animate-in="whoosh-in-right" do elementu <p> w taki sposób:

<p class="banner-text" animate-in="whoosh-in-right">
  Pets can lower your stress levels!
</p>

Załaduj ponownie stronę relacji w przeglądarce i sprawdź, czy baner ma animację whoosh-in.

Teraz sprawmy, że wszystkie obrazy stopniowo pojawią się na ekranie. Dodaj atrybut animate-in="fade-in" do każdego z elementów amp-img, aby kod wyglądał tak:

<amp-img
  src="assets/cat.jpg"
  width="720"
  height="1280"
  layout="responsive"
  animate-in="fade-in"
>
</amp-img>
<amp-img
  src="assets/dog.jpg"
  width="720"
  height="1280"
  layout="responsive"
  animate-in="fade-in"
>
</amp-img>
<amp-img
  src="assets/bird.jpg"
  width="720"
  height="1280"
  layout="responsive"
  animate-in="fade-in"
>
</amp-img>
<amp-img
  src="assets/rabbit.jpg"
  width="720"
  height="1280"
  layout="responsive"
  animate-in="fade-in"
>
</amp-img>

Jeśli odświeżysz i załadujesz ponownie stronę, każdy z obrazów stopniowo pojawi się na ekranie. To wspaniale, ale efekt jest ledwie zauważalny, ponieważ wszystkie obrazy pojawiają się w tym samym czasie! Możemy poprawić efekt wizualny, zmieniając czasy rozpoczęcia tych animacji.

Opóźnijmy wejście pierwszego obrazu tak, aby zbliżył się do momentu, gdy skończy wchodzić baner tekstowy, powiedzmy o 0,4 sekundy. Pozostałe trzy obrazy mogą pojawiać się 0,2 sekundy po wejściu poprzedniego obrazu. Dla każdego z elementów amp-img dodaj atrybut animate-in-delay=""" z odpowiednią wartością opóźnienia. Twój kod powinien wyglądać tak:

<amp-img
  src="assets/cat.jpg"
  width="720"
  height="1280"
  layout="responsive"
  animate-in="fade-in"
  animate-in-delay="0.4s"
>
</amp-img>
<amp-img
  src="assets/dog.jpg"
  width="720"
  height="1280"
  layout="responsive"
  animate-in="fade-in"
  animate-in-delay="0.6s"
>
</amp-img>
<amp-img
  src="assets/bird.jpg"
  width="720"
  height="1280"
  layout="responsive"
  animate-in="fade-in"
  animate-in-delay=".8s"
>
</amp-img>
<amp-img
  src="assets/rabbit.jpg"
  width="720"
  height="1280"
  layout="responsive"
  animate-in="fade-in"
  animate-in-delay="1s"
>
</amp-img>

Odśwież i załaduj ponownie relację. Twoja ostatnia strona powinna wyglądać tak:

W relacjach internetowych dostępnych jest wiele możliwości animacji (np. łączenie animacji, animacje łańcuchowe), a ten samouczek ledwie muska temat. Aby dowiedzieć się więcej o animacjach, zapoznaj się z dokumentacją referencyjną składnika amp-story.