freeCodeCamp/curriculum/challenges/german/01-responsive-web-design/applied-visual-design/use-a-bezier-curve-to-move-...

4.1 KiB

id title challengeType videoUrl forumTopicId dashedName
587d78a9367417b2b2512ae9 Eine Grafik mit einer Bézierkurve bewegen 0 https://scrimba.com/c/c6bnRCK 301071 use-a-bezier-curve-to-move-a-graphic

--description--

In einer vorherigen Aufgabe wurde das Schlüsselwort ease-out behandelt, welches eine Änderung der Animationsgeschwindigkeit beschreibt, die zunächst beschleunigt und dann am Ende der Animation verlangsamt. Rechts wird der Unterschied zwischen dem ease-out Schlüsselwort (für das blaue Element) und dem linear Schlüsselwort (für das rote Element) demonstriert. Ähnliche Animationsabläufe wie mit dem Schlüsselwort ease-out können auch durch eine benutzerdefinierte kubische Bézierkurvenfunktion erreicht werden.

Im Allgemeinen führt das Ändern der Ankerpunkte p1 und p2 zu unterschiedlichen Bézierkurven und somit zu anderen Animationsabläufen. Hier ist ein Beispiel für eine Bezierkurve, die Werte verwendet, um den Style ease-out zu imitieren:

animation-timing-function: cubic-bezier(0, 0, 0.58, 1);

Denke daran, dass alle cubic-bezier-Funktionen mit p0 bei (0, 0) beginnen und mit p3 bei (1, 1) enden. In diesem Beispiel bewegt sich die Kurve schneller durch die y-Achse (beginnt bei 0, geht über zu p1 mit y-Wert 0, dann zu p2 mit y-Wert 1) als sie sich durch die x-Achse bewegt (0 am Anfang, dann 0 für p1, bis zu 0.58 für p2). Dadurch schreitet die Veränderung des animierten Elements schneller voran als die Dauer der Animation für diesen Abschnitt. Gegen Ende der Kurve kehrt sich die Beziehung zwischen den Änderungen der x- und y-Werte um. Der y-Wert bewegt sich von 1 nach 1 (keine Änderung) und der x-Wert bewegt sich von 0.58 nach 1, wodurch sich die Animation, verglichen mit der Animationsdauer, langsamer ändert.

--instructions--

Um die Wirkung dieser Bézierkurve in Aktion zu sehen, ändere die animation-timing-function des Elements mit der Id red in eine cubic-bezier Funktion mit x1, y1, x2 und y2 mit Werten von jeweils 0, 0, 0.58, 1. Dadurch werden sich beide Elemente durchweg ähnlich bewegen.

--hints--

Der Wert der animation-timing-function-Eigenschaft des Elements mit der Id red sollte eine cubic-bezier-Funktion mit den Werten x1, y1, x2 und y2 von 0, 0, 0.58 und 1 sein.

assert(
  $('#red').css('animation-timing-function') == 'cubic-bezier(0, 0, 0.58, 1)'
);

Das Element mit der Id red sollte nicht mehr die animation-timing-function-Eigenschaft von linear haben.

assert($('#red').css('animation-timing-function') !== 'linear');

Der Wert der Eigenschaft animation-timing-function für das Element mit der Id blue sollte sich nicht ändern.

const blueBallAnimation = __helpers.removeWhiteSpace(
  $('#blue').css('animation-timing-function')
);
assert(
  blueBallAnimation == 'ease-out' ||
    blueBallAnimation == 'cubic-bezier(0,0,0.58,1)'
);

--seed--

--seed-contents--

<style>
  .balls{
    border-radius: 50%;
    position: fixed;
    width: 50px;
    height: 50px;
    margin-top: 50px;
    animation-name: bounce;
    animation-duration: 2s;
    animation-iteration-count: infinite;
  }
  #red {
    background: red;
    left: 27%;
    animation-timing-function: linear;
  }
  #blue {
    background: blue;
    left: 56%;
    animation-timing-function: ease-out;
  }
  @keyframes bounce {
    0% {
      top: 0px;
    }
    100% {
      top: 249px;
    }
  }
</style>
<div class="balls" id= "red"></div>
<div class="balls" id= "blue"></div>

--solutions--

<style>
  .balls{
    border-radius: 50%;
    position: fixed;
    width: 50px;
    height: 50px;
    margin-top: 50px;
    animation-name: bounce;
    animation-duration: 2s;
    animation-iteration-count: infinite;
  }
  #red {
    background: red;
    left: 27%;
    animation-timing-function: cubic-bezier(0, 0, 0.58, 1);
  }
  #blue {
    background: blue;
    left: 56%;
    animation-timing-function: ease-out;
  }
  @keyframes bounce {
    0% {
      top: 0px;
    }
    100% {
      top: 249px;
    }
  }
</style>
<div class="balls" id= "red"></div>
<div class="balls" id= "blue"></div>