Chcę mieć stronę internetową, która ma jedno wyśrodkowane słowo.
Chcę, aby to słowo zostało narysowane za pomocą animacji, tak aby strona „zapisała” to słowo w taki sam sposób, jak my, tzn. Zaczyna się w jednym punkcie i rysuje linie i krzywe w czasie, tak aby końcowy wynik był glifem.
Nie dbam o to, czy jest to zrobione za <canvas>
pomocą DOM, czy też o to, czy robi się to za pomocą JavaScript czy CSS. Brak jQuery byłby miły, ale nie wymagany.
W jaki sposób mogę to zrobić? Szukałem wyczerpująco bez powodzenia.
javascript
css
canvas
html5-canvas
css-shapes
strugee
źródło
źródło
Odpowiedzi:
Wersja na płótnie
Spowoduje to narysowanie pojedynczych znaków bardziej niż pisanie ręcznie. Wykorzystuje długi wzorzec myślowy, w którym kolejność włączania / wyłączania jest zmieniana w czasie na znak. Ma również parametr prędkości.
Przykładowa animacja (patrz demo poniżej)
Aby zwiększyć realizm i wrażenia organiczne, dodałem losowe odstępy między literami, przesunięcie delta y, przezroczystość, bardzo subtelny obrót i na koniec używając już „ręcznie napisanej” czcionki. Można je zawrzeć jako parametry dynamiczne, aby zapewnić szeroki zakres „stylów pisania”.
Aby uzyskać jeszcze bardziej realistyczny wygląd, wymagane byłyby dane ścieżki, które nie są domyślnie. Jest to jednak krótki i wydajny fragment kodu, który aproksymuje zachowanie napisane odręcznie i jest łatwy do wdrożenia.
Jak to działa
Definiując wzór kreski, możemy tworzyć marszowe mrówki, linie kropkowane i tak dalej. Wykorzystując to, definiując bardzo długą kropkę dla „wyłączonej” kropki i stopniowo zwiększając „włączoną” kropkę, da to złudzenie rysowania linii podczas głaskania podczas animacji długości kropki.
Ponieważ kropka wyłączona jest tak długa, powtarzający się wzór nie będzie widoczny (długość będzie się różnić w zależności od rozmiaru i właściwości używanego kroju pisma). Ścieżka litery będzie miała długość, więc musimy upewnić się, że każda kropka pokrywa przynajmniej tę długość.
W przypadku liter, które składają się z więcej niż jednej ścieżki (np. O, R, P itd.), Tak jak jedna dla konturu, jedna dla pustej części, linie będą wyglądały na narysowane jednocześnie. Dzięki tej technice nie możemy wiele na to poradzić, ponieważ wymagałoby to dostępu do każdego segmentu ścieżki, aby był głaskany osobno.
Zgodność
W przypadku przeglądarek, które nie obsługują elementu canvas, można umieścić alternatywny sposób wyświetlania tekstu między tagami, na przykład tekst w stylu:
Próbny
Powoduje to animowane uderzenie na żywo ( bez zależności ) -
źródło
Edytuj 2019
Stworzyłem bibliotekę javascript, która może tworzyć realistyczne animacje. Jest łatwy w użyciu i wymaga specjalnego pliku JSON, który działa jak czcionka.
Checkout strona GitHub dla dokumentacji i przykładów. I Codepen
Poprzednia odpowiedź
Poniższy przykład wykorzystuje plik snap.js do dynamicznego tworzenia
tspan
elementów, a następnie animowania każdego z nichstroke-dashoffset
.Pokaż fragment kodu
Poprzednia odpowiedź
Możesz zrobić coś takiego za pomocą svg's
stroke-dasharray
Pokaż fragment kodu
Bez
keyframes
animacji możesz zrobić coś takiegoPokaż fragment kodu
A do obsługi IE możesz użyć jquery / javascript
Pokaż fragment kodu
źródło
$(this).css('fill', 'red')
jako oddzwaniania do animacjiTylko CSS:
źródło
Po wielu testach oto kilka uwag. Celem jest wyświetlanie szybkich danych tekstowych w najmniej blokujący sposób, na ciężkich stronach DOM wymagających interakcji użytkowników.
Istnieje oczywiście wiele sposobów na osiągnięcie tego samego. W tym przykładzie różnice mogą nie być oczywiste, tak naprawdę dotyczą złożonych interfejsów.
Najwolniejszy :
innerHTML
i wbudowany styl. DOM jest ponownie obliczany przy każdej iteracji. Przeglądarka ciężko pracuje, aby utrzymać pociąg. Szybko zawiedzie, powodując wycieki pamięci i zawieszanie się:Lepiej : Użycie
textContent
,requestAnimationFrame
a API animacji internetowych. To idzie znacznie płynniej, jest oczywiste na ciężkich stronach DOM. Interakcje użytkownika nie blokują odświeżania. Niektóre odświeżenia mogą zostać pominięte, aby interfejs dobrze reagował.W powyższym przykładzie DOM jest wciąż ponownie obliczany pod kątem przepełnienia tekstu. Widzimy, że debugger mocno mruga. To naprawdę ma znaczenie dla elementów kaskadowych! Może to nadal spowalniać javascript i przewijanie użytkownika.
Pełna moc : możliwe jest użycie samego css do odświeżania danych za pomocą
content
reguły css i zmiennych css. Tekst nie będzie wtedy możliwy do wybrania.Moje testy wykazały wielkie ulepszenia, silnik javascript szybko pomija inne zadania. Czasami może zacząć się nieco wolniej niż w powyższym przykładzie. Ale oprócz tego nie blokuje to zwojów użytkowników, a debugger też lubi, nie ma już przeskoków.
źródło