Przesuń kursor blisko przycisku listy oczekujących na stronie głównej, a narysowany obok niego Mr. Grummel się cieszy. Odsuń się, a stygnie – surowy, potem zirytowany, a odpowiednio daleko – wyraźnie wściekły, para i wszystko. Czyta się to jak postać, która cię zauważa. Pod spodem to zwykły wzór na odległość, wykonywany wewnątrz callbacku requestAnimationFrame przy każdym ruchu myszy: zadowolony poniżej 180 pikseli od środka przycisku, surowy poniżej 420, zirytowany poniżej 700, wściekły dalej niż to. Żadnego uczenia maszynowego, żadnego wykrywania intencji – cała paleta emocji nauczyciela sprowadzona do czterech liczbowych progów.
Jedna zasada, która wyprzedza dystans
Obliczenie dystansu ma klauzulę wyjścia: postaw kursor bezpośrednio na przycisku, a przestaje oceniać odległość i zaczyna świętować, a ten stan trzyma się, dopóki nie odejdziesz. Musi to wyprzedzać wszystko inne, bo moment, w którym jesteś na przycisku, to moment, w którym jego opinia o tobie przestaje mieć znaczenie. Postać, która wciąż parowałaby z wściekłości w trakcie kliknięcia, czytałaby zły sygnał dokładnie w chwili, gdy sygnał przestaje mieć znaczenie.
Quiz na stronie prowadzi powiązany, ale osobny system nastroju, oparty na odpowiedziach zamiast na pozycji kursora. Passa dwóch poprawnych odpowiedzi zdobywa „zadowolonego”; błędna odpowiedź podbija licznik eskalacji o jeden, z limitem trzech, a każda błędna odpowiedź zeruje też passę. Trzy błędne z rzędu i jest „wściekły”, z trzęsącą się kartką i odcieniem ekranu, które oba śledzą ten sam licznik. Odpowiedz potem poprawnie, a licznik cofa się o krok, zamiast całkowicie się zerować – zła seria kosztuje cię stopniowo, a dobra seria odzyskuje to w ten sam sposób.
Część, która musi zostać wyłączona
Śledzenie każdego ruchu myszy, żeby napędzać nieustannie aktualizowaną animację, to dokładnie ten rodzaj ruchu, po który sięga prefers-reduced-motion: reduce, więc nasłuchiwacz podążający za kursorem sprawdza to ustawienie raz, na wstępie, i w ogóle się nie podpina, jeśli jest włączone. To realny kompromis, nie darmowy: ktoś z tym ustawieniem wciąż dostaje dyskretne nastroje – najechanie, fokus, błędna odpowiedź w quizie wciąż działają – tylko traci ciągłą wersję „on obserwuje, jak się zbliżasz”. Wybraliśmy wersję, która w pełni respektuje to ustawienie, zamiast takiej, która rozwadnia ruch i wciąż wysyła jego część, bo ustawienie respektowane „w większości” to ustawienie, które nie jest respektowane.
Czego wciąż nie jesteśmy pewni
Metafora „zaangażowania” oparta na dystansie do przycisku to rozsądne przypuszczenie i nic więcej – ktoś, kto uważnie czyta stronę, trzymając kursor zaparkowany w kącie, wcale nie jest niezaangażowany, po prostu formuła, która zna tylko piksele, źle go śledzi. Nie sprawdziliśmy, czy system nastroju popycha kogokolwiek w stronę listy oczekujących, czy tylko zostaje zauważony i wywołuje uśmiech w danej chwili. To dwa różne rezultaty, a na razie mamy dowody tylko na ten drugi.
Nic z tego nie jest programem nauczania – to notatka o tym, jak zbudowana jest ta strona marketingowa, a nie coś, z czego pyta aplikacja. Jeśli wzory na odległość i nasłuchiwacze zdarzeń to rzeczy, z których wolałbyś być pytany, niż o nich czytać, dział Informatyka w aplikacji obejmuje prostsze klocki leżące u ich podstaw, zaczynając od Programowania.