Animowana pętla tekstu: krzywe Lissajous

Kiedy użytkownik musi poczekać na zakończenie czasochłonnego procesu (np. pobieranie pliku lub zakończenie obliczeń), zamiast wyświetlać nudny komunikat "proszę czekać" lub kręcące się kółko, co powiesz na animowany świecący tekst?

Oto jak to działa (pełny kod poniżej):

Wiersze [1-6] ustawiają element HTML5 Canvas.
[7] Ustaw rozmycie - to właśnie sprawia, że litery "świecą".
[8] Reset głównego licznika.
[9] Tekst, który chcemy wyświetlić.

[11-25] Główna pętla animacji:
[12] Wyczyść poprzednią klatkę.
[13] Dla każdej litery:
[14] Oblicz pomocniczy licznik
[15-16] Współrzędne x i y litery są obliczane za pomocą wzoru wykorzystującego sinus/cosinus pomocniczego licznika (krzywa Lissajous wokół środka canvasa).
Spróbuj pobawić się różnymi wartościami, do tych doszedłem metodą prób i błędów.
[17] Kolor RGB litery:
Składowa czerwona zależy od współrzędnej x.
Składowa zielona jest zawsze zerowa.
Składowa niebieska zależy od współrzędnej y.
To daje następującą mapę kolorów:



[18-19] zastosuj kolor do litery i cienia (rozmycia).
[20] Rozmiar litery (font) zależy od współrzędnej x.
[21] Narysuj literę.
[23] Zwiększ główny licznik.
[24] Zażądaj następnej klatki.
[26] Start!

<html>
<body bgcolor='black'>
<canvas id="myCanvaswidth="600height="400"></canvas>
<script>
let canvas = document.getElementById("myCanvas");
let context = canvas.getContext("2d");
context.shadowBlur = 20;
let counter = 0;
let text = ' Ładowanie........';
 
function animate() {
  context.clearRect(00canvas.widthcanvas.height);
  for (let i = 0i < text.lengthi++) {
    let counter2 = counter / 10 + i;
    let x = canvas.width / 2 + 200 * Math.sin(counter2 / (Math.PI * 1.2));
    let y = canvas.height / 2 + 160 * Math.cos(counter2 / (Math.PI * 8));
    let color = `rgb(${Math.floor(x / 2)}, 0, ${Math.floor(y)})`;
    context.fillStyle = color;
    context.shadowColor = color;
    context.font = 'bold ' + x / 10 + 'px sans-serif';
    context.fillText(text.charAt(i), xy);
  }
  counter++;
  window.requestAnimationFrame(animate);
}
animate();
</script>
</body>
</html>





Więcej samouczków JS

Gra "Wieża" - 84 linie JavaScript

Fraktale - 25 linii

Sinus scroll - 30 linii

Gra "Angry Chickens"

Animowane krzywe kwadratowe - 40 linii

Animowane konstelacje cząsteczek - 42 linie

Eksperyment z enginem fizyki


Repozytorium GitHub
Wszystkie kody są udostępnione na licencji MIT