Samouczek framera: 7 prostych mikrointerakcji, aby ulepszyć swoje prototypy

Opublikowany: 2022-03-11

Witamy w drugiej części naszej serii samouczków Framer. W poprzednim artykule dowiedzieliśmy się o podstawach korzystania z Framera w trybie projektowania, a także o tym, jak napisać prosty kod, aby nasze projekty ożyły. W tym artykule skupimy się na wykorzystaniu Framer do tworzenia mikrointerakcji i animowanych przejść. Omówimy, jak stworzyć siedem przydatnych interakcji dla swoich prototypów.

Dlaczego powinieneś prototypować małe interakcje?

Płynny ruch, zmiany stanu i subtelne przejścia pomagają użytkownikowi zrozumieć, jak korzystać z interfejsu, przekazując mu informacje zwrotne na temat określonych działań. Często te przejścia będą echem rzeczywistych analogów (takich jak przesuwanie przełącznika) lub wykorzystują typowe wzorce interakcji urządzenia (takie jak dotknięcie, aby rozwinąć). W tym samouczku skupimy się na interakcjach, które dodają interfejsowi końcowego szlifu, aby pomóc w zrozumieniu i wzbudzić zachwyt użytkownika.

Spójrz na poniższe przykłady. Projektanci na całym świecie tworzą te mikrointerakcje w różnych produktach.

  • przykłady mikrointerakcji
  • przykłady mikrointerakcji
  • przykłady mikrointerakcji

7 prototypów

W tym samouczku przedstawię przegląd każdej mikrointerakcji i kilka fragmentów kodu. Będziemy używać kilku różnych technik, dzięki czemu będziesz mógł wybrać tę, która najlepiej pasuje do Twojego produktu. Nie ma „właściwego” sposobu na stworzenie czegokolwiek w Framer Studio — jak wspomniałem w poprzednim artykule, Framer daje ci dużą swobodę tworzenia tak, jak chcesz.

Obszary robocze w Framer ze wszystkimi projektami interakcji

Czy widziałeś już takie interakcje? Jasne, masz! Widzisz je codziennie na swoim smartfonie. Czas stworzyć własny.

1. Przycisk akcji

Przycisk akcji często reprezentuje główną akcję bieżącego ekranu. Czasami zawiera kilka akcji w środku. W drugim przypadku stworzymy interakcję. Pobierz działający prototyp tutaj: https://framer.cloud/ShBnH

Obraz

Krok 1: Utwórz trzy przyciski w kształcie koła

Na początek utwórz jeden główny przycisk w kształcie koła z ikoną w środku i dwa mniejsze przyciski umieszczone pod przyciskiem głównym. Nie zapomnij oznaczyć wszystkich tych warstw jako interaktywnych w trybie projektowania (za pomocą wskaźnika celu).

Proces tworzenia w trybie projektowania ramek

Krok 2: Zaprojektuj dwa stany dla wszystkich warstw

Utwórz dwa różne stany dla warstw. Użyj poniższego kodu, aby przesunąć mniejsze przyciski nad główny i obrócić ikonę o 45°:

 button_1.states.a = y: 427 x: 246 width: 64 height: 64 button_2.states.a = y: 330 x: 246 width: 64 height: 64 icon.states.a = rotation: 45

Krok 3: Dodaj wydarzenie

Aby ten prototyp był animowany, musimy dodać wydarzenie. Po dotknięciu przycisku akcji zmień stany wszystkich warstw:

 button.onTap -> button_1.stateCycle() button_2.stateCycle() icon.stateCycle()

Krok 4: Wiosenna animacja

Różnica między domyślną a sprężynową krzywą animacji

W tym momencie animacja wygląda bardzo mechanicznie. Aby dodać ludzki charakter, dodamy animację wiosny dla wszystkich warstw:

 button_1.animationOptions = curve: Spring(tension: 170, friction: 12) button_2.animationOptions = delay: 0.05 curve: Spring(tension: 170, friction: 12) icon.animationOptions = curve: Spring(tension: 250, friction: 5)

Przycisk akcji jest gotowy do pracy!

Obraz

2. Interaktywne przełączniki

Poniższe kroki pozwolą Ci stworzyć własną interakcję z przełącznikiem. Pobierz działający prototyp tutaj: https://framer.cloud/ieypV

Interakcja przełącznika w prototypie iPhone'a 7

Krok 1: Zaprojektuj plac zabaw dla przełączników

Przełącz projekt w Framer

Potrzebne będą tylko dwie rzeczy: sam przełącznik, który zawiera co najmniej dwie warstwy (tło i kropka) oraz kilka warstw do animacji po użyciu przełącznika.

Krok 2: Utwórz stany

Czy pamiętasz z pierwszego artykułu, jak projektować stany bezpośrednio w Framer Studio? Zaprojektuj swoje stany tak, jak lubisz, lub użyj moich ustawień:

 dot.states.a = x: 50 backgroundColor: "rgba(5,106,161,1)" switch_bg.states.a = backgroundColor: "rgba(0,136,205,1)" icon.states.a = opacity: 0 circle.states.a = x: 37 y: 183 width: 301 height: 301 circle_1.states.a = x: 20 y: 166 width: 337 height: 337

Krok 3: Dodaj wydarzenie

Aby prototyp działał, musimy dodać zdarzenie do przełącznika. Po dotknięciu przełącznika zmienimy stan wszystkich warstw:

 switch_1.onTap (event, layer) -> dot.stateCycle() switch_bg.stateCycle() circle.stateCycle() circle_1.stateCycle() icon.stateCycle()

Krok 4: Dostosuj czas

Aby wszystko było bardziej naturalne, dostosuj czas i opóźnienie wszystkich stanów:

 dot.animationOptions = time: 0.2 switch_bg.animationOptions = time: 0.2 circle_1.animationOptions = time: 0.5 curve: Spring circle.animationOptions = time: 0.5 delay: 0.05 curve: Spring icon.animationOptions = time: 0.5 curve: Spring

Teraz nasz prototyp jest gotowy!

3. Akcja przesuwania pozycji na liście

Jest to typowa interakcja służąca do usuwania, archiwizowania lub zapisywania elementów z listy. Przesuń palcem w lewo lub w prawo, a element zostanie usunięty. Pobierz prototyp tutaj: https://framer.cloud/rzMWP

Usuń interakcję z przedmiotem na makiecie iPhone'a 7

Krok 1: Utwórz prototyp w trybie projektowania

Usuń projekt interakcji z przedmiotami w Framer

Jeśli chcesz, możesz użyć własnego projektu. Musisz tylko zachować tę samą strukturę warstw. Jak widać na powyższym obrazku, pod wszystkimi elementami listy znajduje się przycisk „cofnij”.

Krok 2: Spraw, aby przedmioty można było przeciągać

Dla uproszczenia utworzymy interakcję tylko dla pierwszego elementu listy. Najpierw ustaw element listy jako przeciągany: item.draggable = true .

Następnie zablokuj oś pionową: item.draggable.vertical = false .

Ustaw ograniczenia obszaru do przeciągania: item.draggable.constraints

I na koniec ustaw rozmiar na rozmiar przedmiotu: size: item .

Tak wygląda cały kod:

 item.draggable = true item.draggable.vertical = false item.draggable.constraints = size: item

Teraz możesz przesuwać palcem w lewo i w prawo, a element zawsze powróci do swojej pierwotnej pozycji.

Krok 3: Utwórz stan

Następnie utwórz stan dla elementu listy po jego usunięciu. Po prostu przesunąłem go poza ekran za pomocą osi X.

 item.states.a = x: -360

Krok 4: Zmień stan po przesunięciu

Na koniec musimy stworzyć wyzwalacz, aby rozpocząć interakcję. Gdy przeciągamy element na lewą stronę ekranu, należy go usunąć. Kod będzie wyglądał tak:

 item.onMove -> if item.x < -70 item.stateCycle("a")

W tym przypadku używamy instrukcji „if”. Powyższy kod w zasadzie mówi, że gdy przesuniemy warstwę elementu o więcej niż 70px, to zmień stan elementu na stan 'a'. Możesz przeczytać o instrukcjach if w dokumentacji Framer Studio: https://framer.com/getstarted/programming/#conditional

Krok 5: Cofnij akcję po dotknięciu

Już prawie skończyliśmy z tą interakcją. Pozostało tylko cofnąć tę akcję:

 item_bg.onTap -> item.stateCycle("default")

Powinieneś znać ten kod z poprzedniego samouczka.

Krok 6 (opcjonalnie): Dostosuj czas animacji

Jeśli chcesz, możesz dostosować czas animacji:

 item.animationOptions = time: 0.75 curve: Spring

4. Przycisk ładujący

Jest to bardzo przydatna interakcja dla akcji, które wymagają ładowania lub czasu oczekiwania dla użytkownika. Kiedy stworzymy tę interakcję, nauczysz się zarządzać wieloma animacjami, które dzieją się pojedynczo. Pobierz prototyp tutaj: https://framer.cloud/FxmHN

Obraz

Krok 1: Utwórz prototyp w trybie projektowania

Utwórz prosty przycisk z czterema warstwami podrzędnymi: paskiem postępu i trzema ikonami różnych stanów. Zaprojektowałem mój przycisk z widoczną ikoną przesyłania, paskiem postępu na dole o szerokości 0 i dwiema ukrytymi ikonami.

Projekt przycisków w Framer

Krok 2: Dodaj wydarzenie

Cały ten prototyp można wykonać bez pisania ani jednej linii kodu, po prostu używając funkcji autokodowania w Framer.

Najpierw dodaj wydarzenie. Całą interakcję wywołamy stuknięciem w warstwę przycisków:

Obraz

Oto kod, który napisał dla Ciebie Framer:

 button.onTap (event, layer) ->

Krok 3: Zaprojektuj animacje

Wykorzystamy funkcje autokodowania Framer do projektowania wszystkich animacji:

Projektowanie animacji z funkcją autokodowania Framer

Zaprojektowałem cztery animacje w różnym czasie:

  • Pierwsza animacja to zmiana szerokości paska postępu.
  • Drugi to ukrywanie ikony przesyłania z przezroczystością.
  • Trzecia obraca się i pokazuje ikonę ładowarki.
  • Ostatni pokazuje i skaluje ikonę wyboru.

Oto kod, który Framer napisał dla każdej z tych animacji:

 # change progress bar width progress.animate width: 247 options: time: 1.4 curve: Bezier.ease # hide upload icon upload.animate opacity: 0.00 y: 39 options: time: 0.2 curve: Bezier.ease # show and rotate loader icon load.animate opacity: 1.00 rotation: 360 options: time: 1 curve: Bezier.ease # show and scale check icon done.animate opacity: 1.00 scale: 1.4 options: time: 0.2 curve: Bezier.ease delay: 1.00

Krok 4: Zresetuj animację ładowania

Jak mogłeś zauważyć, nie ukryliśmy ikony programu ładującego po zakończeniu animacji. Aby ukończyć ten prototyp, uruchom kolejną animację za pomocą tego zdarzenia: load.onAnimationEnd ->

 load.animate opacity: 0.00 options: time: 0.2 curve: Bezier.ease

5. Pociągnij, aby odświeżyć

Prawie każdy produkt z listą w środku korzysta z tego typu interakcji. Użytkownik rozwija całą listę, aby ją odświeżyć. Bardzo łatwo jest stworzyć. Pobierz prototyp tutaj: https://framer.cloud/DgMDw

Prototyp „przeciągnij, aby odświeżyć” na makiecie iPhone’a 7

Krok 1: Zaprojektuj prostą listę z ikoną odświeżania

Możemy przejść od razu do trybu projektowania. Potrzebujemy dwóch rzeczy: listy i ikony odświeżania. Kluczową rzeczą jest ukrycie ikony odświeżania z kryciem i umieszczenie jej na naszej liście:

Projekt prototypu typu „przeciągnij, aby odświeżyć” w programie Framer

Krok 2: Utwórz komponent przewijania

Chcemy, aby nasza lista była przewijalna. Aby to zrobić, użyj komponentu scroll i dodaj do niego warstwę listy:

 scroll = new ScrollComponent size: Screen scrollHorizontal: false list.parent = scroll.content

Krok 3: Spraw, aby ikona odświeżania była widoczna

Utwórz prosty stan dla ikony:

 icon.states.a = opacity: 1

Krok 4: Dodaj wydarzenie po rozwinięciu

Nasza lista jest teraz przewijalna. Oznacza to, że kiedy przewijamy w górę lub w dół, cała zawartość przewijania porusza się na osi 'y'. Dzięki tej wiedzy możemy stworzyć wydarzenie:

 scroll.content.onMove -> if scroll.content.y > 180 icon.stateCycle("a")

Ponownie używamy stwierdzenia „jeśli”. Jeśli lista zostanie rozciągnięta (przesunięta na osi y) o więcej niż 180px, uruchomimy akcję. W tym przypadku będziemy animować dwie warstwy: listę i ikonę odświeżania.

 scroll.content.onMove -> if scroll.content.y > 180 icon.stateCycle("a") list.animate y: 210 options: time: 1 curve: Bezier.ease refresh.animate rotation: 360 options: time: 1

Używamy „animacji”, aby przesunąć listę w dół o 210 pikseli i obrócić ikonę odświeżania o 360°.

Krok 5: Zresetuj wszystkie stany

Prototyp już prawie działa, ale po animacji odświeżania musimy zresetować wszystkie warstwy. W tym celu użyjemy zdarzenia po zakończeniu animacji:

 icon.onAnimationEnd ->

Animujemy obrót ikony odświeżania z powrotem do jej pierwotnej pozycji i za pomocą cyklu stanów resetujemy stan tła listy i ikony:

 scroll.content.onMove -> if scroll.content.y > 180 icon.stateCycle("a") list.animate y: 210 options: time: 1 curve: Bezier.ease refresh.animate rotation: 360 options: time: 1 icon.onAnimationEnd -> refresh.animate rotation: 0 list.stateCycle("default") icon.stateCycle("default")

Otóż ​​to!

6. Interakcja przeciągania

Czy zauważyłeś, że podczas przeciągania elementu do aplikacji zawsze coś się dzieje z samym elementem? Czasami element się kurczy, inne elementy są zamazane lub zmienia się krycie. Nauczmy się tworzyć tego rodzaju interakcję. Pobierz działający prototyp tutaj: https://framer.cloud/YstiW

Przeciąganie projektu interakcji w Framer

Krok 1: Zaprojektuj prostą siatkę z płytkami

Utwórz siatkę płytek i upewnij się, że znajdują się one wewnątrz elementu nadrzędnego.

Przeciąganie projektu prototypu w Framer

Krok 2: Użyj pętli „for”, aby wskazać wszystkie kafelki

for loop” może brzmieć przerażająco, ale jest naprawdę proste. Jeśli nie jesteś zaznajomiony z pętlami for , możesz najpierw przeczytać trochę tła: https://framer.com/getstarted/programming/#loops-and-arrays

Użyjemy pętli for , aby wskazać wszystkie kafelki w naszej siatce:

 for item in grid.subLayers

Za pomocą tego prostego wiersza kodu kierowałeś wszystkie warstwy w warstwie siatki.

Krok 3: Spraw, aby płytki można było przeciągać

Spraw, aby każdy element wewnątrz siatki można było przeciągać:

 for item in grid.subLayers item.draggable = true

Krok 4: Zaprojektuj stan przeciągania

Wszystkie elementy powinny mieć stan podczas przeciągania. Musisz zacząć od kodu, ale później będziesz mógł edytować ten stan w Edytorze warstw:

 for item in grid.subLayers item.draggable = true item.states.a = scale: 1.1 shadowBlur: 50 shadowColor: 'rgba(0,0,0,0.5)'

Krok 5: Przeciągnij wydarzenia

Musimy tworzyć zdarzenia, które wyzwalają różne stany podczas przeciągania elementu. Pierwsze zdarzenie uruchomi akcję, gdy zaczniemy przeciągać:

 for item in grid.subLayers item.draggable = true item.states.a = scale: 1.1 shadowBlur: 50 shadowColor: 'rgba(0,0,0,0.5)' item.onDragStart -> this.bringToFront() this.stateCycle("a")

Użyłem this.bringToFront() , aby upewnić się, że element zawsze znajduje się nad innymi warstwami.

Drugi wyzwalacz zresetuje stan elementu:

 for item in grid.subLayers item.draggable = true item.states.a = scale: 1.1 shadowBlur: 50 shadowColor: 'rgba(0,0,0,0.5)' item.onDragStart -> this.bringToFront() this.stateCycle("a") item.onDragEnd -> this.sendToBack() this.stateCycle("default")

W tym momencie mamy działający prototyp.

Krok 6 (opcjonalnie): Graj z czasem

Interakcja zawsze odbywa się na osi czasu. Aby uzyskać idealny efekt, warto dostosować oś czasu:

 for item in grid.subLayers item.draggable = true item.states.a = scale: 1.1 shadowBlur: 50 shadowColor: 'rgba(0,0,0,0.5)' item.onDragStart -> this.bringToFront() this.stateCycle("a") item.onDragEnd -> this.sendToBack() this.stateCycle("default") item.animationOptions = time: 0.3 curve: Spring

7. Wiele przycisków „lubię to” (zaawansowane)

W tym prototypie użyjemy bardziej zaawansowanych technik, aby pokazać inny sposób kierowania warstw w Framer Studio, co pozwoli zbudować bardziej responsywne interakcje w krótszym czasie. Jeśli nie znasz podstaw kodowania, zachęcam do przeczytania najpierw tego artykułu: https://blog.framer.com/code-less-achieve-more-with-arrays-in-framer-c43594d13d59

Do tej interakcji pominiemy część projektową i użyjemy prototypu, który stworzyłem specjalnie na potrzeby tego artykułu: https://framer.cloud/SZMCH

Lubi interakcję na makiecie iPhone'a 7

Krok 1: Utwórz tablice

Spójrz na strukturę warstw wewnątrz Framer Studio:

Lubi projektowanie interakcji w Framer

Mamy „przycisk” wewnątrz „wiersza” w grupie „lista”. Będziemy tworzyć interakcję na warstwach przycisków, więc musimy na nie celować. Ale najpierw musimy znaleźć wszystkie warstwy wierszy i umieścić je w tablicy:

 rows = list.children buttons = []

Utworzyłem również pustą tablicę dla wszystkich warstw „przycisków”: buttons = [] .

Krok 2: Dodaj podwarstwę do tablicy

Zacznijmy od „pętli for”:

 for i in rows buttons.push(i.children[0])

Aby dodać warstwy do tablicy, użyjemy: buttons.push() . Oznacza to, że umieszczamy pierwszą warstwę każdej grupy „wierszy” wewnątrz tablicy.

Krok 3: Utwórz stan i wydarzenie

Teraz utworzymy stan dla naszych przycisków „lubię to” i dodamy do nich zdarzenie podczas stukania:

 for i in buttons i.states.a = scale: 1.2 hueRotate: -80 i.onTap -> this.stateCycle() i.animationOptions = time: 0.3 curve: Spring

Możesz użyć tej techniki, aby odtworzyć wszystkie poprzednie prototypy i uczynić je bardziej złożonymi.

Ostatnia uwaga

Tworząc mikrointerakcje, skupiasz się na najdrobniejszych szczegółach. Możesz tworzyć animacje wyzwalane przez dowolny rodzaj akcji i czynić je absolutnie doskonałymi. Pamiętaj, że istnieją setki sposobów na stworzenie tego samego prototypu i powinieneś użyć metody, która pasuje do Twoich umiejętności i potrzeb projektów produktów.

• • •

Dalsza lektura na blogu Toptal Design:

  • eCommerce UX – przegląd najlepszych praktyk (z infografiką)
  • Znaczenie projektowania zorientowanego na człowieka w projektowaniu produktu
  • Najlepsze portfolio projektantów UX – inspirujące studia przypadków i przykłady
  • Zasady heurystyczne dla interfejsów mobilnych
  • Projekt przewidujący: jak tworzyć magiczne doświadczenia użytkownika