Как сделать такую сложную анимацию на CSS?
Есть картинки мяча и ворот:
Как можно на CSS сделать такую анимацию?
- Мяч качается по дуге и вращается по часовой стрелке зацикленно. Анимация плавная, без рывков и нелинейная. Что-то на подобие этого:
- После нажатия на кнопку мяч начинает лететь в ворота (сначала в верхний угол, потом в нижний).
Нажатие на кнопку сделано на jQuery:
$(".button").click(function(){
// Действие
});
Ответы (1 шт):
Автор решения: UModeL
→ Ссылка
Как я понял, анимация довольно условная, поэтому большую её часть можно сделать без скриптов:
body {
margin: 0;
min-height: 100vh;
background: 0% 0% / auto radial-gradient(#1a237e, #000) no-repeat;
display: flex;
flex-flow: column nowrap;
justify-content: center;
align-items: center;
overflow: hidden;
}
.wrapper {
font-size: min(10vh,10vw); /* Масштаб */
width: 6.98em; height: 5.58em;
perspective: 5.58em;
background-image: radial-gradient(closest-side, #673ab7, #3f51b521, #fff0);
}
.wrapper > div { position: absolute; }
.gate {
width: 6.98em; height: 5.58em;
transform-origin: bottom center;
transform: translateZ(-5.58em);
background-image: url('https://i.stack.imgur.com/0NfPK.png');
background-size: 100%;
}
.field {
width: 6.98em; height: 5.58em;
transform-origin: bottom center;
transform: rotateX(90deg) scale(2);
background-image: linear-gradient(#0880, #161);
box-shadow: inset 0 -0.03em 0.02em 0.05em #eee8;
}
.ball-kick {
position: relative;
width: 6.98em; height: 5.58em;
transform-origin: bottom center;
transition: 0.4s ease-out;
}
input:checked ~ .wrapper .ball-kick { transform: translateZ(-5.58em) scale(0.4); }
.ball-wrapper {
position: absolute; left: 50%;
width: 2.21em; height: 5.58em;
transform-origin: top center;
animation: ball_move 2s ease-in-out infinite alternate;
}
input:checked ~ .wrapper .ball-wrapper {
animation-play-state: paused;
transform: translatex(-50%) rotate(0turn);
transition: 0.5s ease-out;
}
.ball {
position: absolute; bottom: 0;
width: 2.21em; height: 2.21em;
transform-origin: center center;
background-image: url('https://i.stack.imgur.com/myNKU.png');
background-size: 100%;
animation: ball_spin 2s linear infinite;
}
input:checked ~ .wrapper .ball {
animation-duration: 60s;
transition: 0.5s ease-in;
}
@keyframes ball_move {
from { transform: translatex(-50%) rotate(-0.1turn); }
to { transform: translatex(-50%) rotate(0.1turn); }
}
@keyframes ball_spin { to { transform: rotate(1turn); }}
<input type="checkbox">
<div class="wrapper">
<div class="field"></div>
<div class="gate"></div>
<div class="ball-kick">
<div class="ball-wrapper">
<div class="ball"></div>
</div>
</div>
</div>
Скриптами делайте логику и контроль состояний.








