• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed CSS animacja - czy da się uzyskać tu płynny ruch?

Aruba Cloud - Virtual Private Server VPS
+1 głos
1,001 wizyt
pytanie zadane 28 lutego 2021 w HTML i CSS przez lukasz21 Obywatel (1,090 p.)
zamknięte 2 marca 2021 przez lukasz21

Witam,

 

Zainspirowany przykładem chciałem zrobić animacje w CSS, gdzie kwadrat obraca się po kole w specyficzny sposób.

 

  1. Założenia:

Używam   transform-origin: 50% 0%; aby kwadrat obracał się tylko według punktu 'po środku górnej krawędzi kwadratu'.

Do wyznaczania ruchu i obrotu używam:  transform: translate(100px, -100px) rotate(-90deg);

Keyframes podzieliłem na 5 kroków: 0% , 25%  , 50%   , 75%  , 100% . 5 punktów, gdzie ma się znaleźć kwadrat w trackie ruchu.

 

 

  1. Problem:

Kod działa, ale:  ruch kwardatu nie jest płynny. Widać jak po dojściu do , np. 25% kwadrat przez chwile się zatrzymuje, potem wznawia ruch. Czy istnieje sposób by uzyskać płynność ruchu, tak by w 1 tempie poruszał się kwadrat w animacji? Nie przychodzi mi żaden pomysł do głowy.

 

Tutaj daje cały kod  codepen-animacja-css

 

Dodatkowo kod html

 <div class="wrapper">
    <div class="a"></div>
    <!--    g1 wyznacza odleglosc -->
    <div class="g1"></div> 
  </div>

Kod CSS

  * {
      box-sizing: content-box;
      margin: 0px;
      padding: 0px;
    }

    .wrapper {
      position: relative;
      height: 100vh;
      width: 100%;
    }

    .a {
      position: absolute;
      top: 43%;
      left: 47%;
      height: 110px;
      width: 110px;
      background: lightblue;

      animation: spin 8s linear infinite;
      /* animation: spin 8s linear both; */
      transform-origin: 50% 0%;
    }

    @keyframes spin {
      0% {
        transform: translate(0px, 0px) rotate(0deg);
      }

      25% {
        transform: translate(100px, -100px) rotate(-90deg);
      }

      50% {
        transform: translate(0px, -200px) rotate(-180deg);
      }

      75% {
        transform: translate(-100px, -100px) rotate(-270deg);
      }

      100% {
        transform: translate(0px, 0px) rotate(-360deg);
      }
    }

    .g1 {
      position: absolute;
      top: 236px;
      left: 762px;
      transform: translate(-50%, -50%);
      border-radius: 50%;
      height: 115px;
      width: 115px;
      background: red;
    }

 

Z góry dziękuję za sugestie.

komentarz zamknięcia: Rozwiazałem problem
komentarz 28 lutego 2021 przez Comandeer Guru (606,480 p.)
Hm, możesz pokazać na filmiku problem? Bo prawdę mówiąc u siebie nie widzę, żeby się zatrzymywało.

PS potwierdź maila na CodePenie, bo fullscreen strasznie by się przydał ;)
1
komentarz 1 marca 2021 przez VBService Ekspert (256,500 p.)
edycja 1 marca 2021 przez VBService

@lukasz21, U mnie też działa "płynnie".

Może to Ciebie zainspiruje.   wink How to Move an Element in a Circular Path with CSS

Mała zmiana, żeby obejść się bez kodu js-a. (od komentuj linie - ciekawe kombinacje)

<div id="parent">
  <div id="child">
    <img src="https://usefulangle.com/img/posts/32-es6.jpg">
    <!-- <img src="https://usefulangle.com/img/posts/32-es6.jpg"> -->       
  </div>
</div>
* {
  box-sizing: content-box;
  margin: 0px;
  padding: 0px;
}

#parent {
  position: absolute;
  width: 300px;
  height: 300px;
  border: 2px solid rgba(0,0,0,0.2);
  /* border: 1px solid rgba(0,0,0,0); */
  /* border: 4px dotted rgba(0,0,0,0.2); */
  border-radius: 50%;
  transform: rotate(0deg);
  transition: transform 0.7s linear;
  animation: spin 8s linear infinite;
  top: 25%;
  left: 25%;
}
#child {
  position: absolute;
  width: 80px;
  height: 80px;
  transform: rotate(0deg);
  transition: transform 0.7s linear;
  top: -40px;
  left: 110px;
  animation: spin 4s linear infinite;
}

#child img {
  max-width: 100%;
  /* border-radius: 10%; */
  border-radius: 50%;
}

/*
#child img:nth-child(2) {
  max-width: 50%;
  // border-radius: 10%; 
  border-radius: 50%;
}
*/

@keyframes spin {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(-360deg);
  }
}

 

1
komentarz 2 marca 2021 przez lukasz21 Obywatel (1,090 p.)
Wielkie dzięki. To jest rozwiązanie którego potrzebowałem. Dzięki temu animacja jest płynna i  kwadrat obraca się 'płynnym' ruchem w jednym tempie.

Podobne pytania

0 głosów
2 odpowiedzi 249 wizyt
pytanie zadane 17 kwietnia 2017 w HTML i CSS przez czujek22 Dyskutant (7,670 p.)
0 głosów
4 odpowiedzi 238 wizyt
pytanie zadane 8 listopada 2015 w HTML i CSS przez niezalogowany
–1 głos
1 odpowiedź 1,180 wizyt
pytanie zadane 8 października 2016 w JavaScript przez Protekton123 Użytkownik (700 p.)

93,277 zapytań

142,276 odpowiedzi

322,282 komentarzy

62,595 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...