Хочу сделать вот такую анимацию: https://dribbble.com/shots/3633228-Avanti-e-indietro-loader .
Но застопорился :( Буду очень благодарен кто поможет доделать анимацию (желательно доделать с помощью javascript/jquery)! Вот код:
:root {
--duration: 1.5s;
--container-size: 210px;
--box-size: 33px;
--box-border-radius: 15%;
}
html,
body {
width: 100%;
height: 100%;
overflow: hidden;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
}
.circle {
width: var(--container-size);
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
}
.
Вот вариант, только с таймингами и оформлением еще надо поколдовать...
<div class="playground">
<div class="boll"></div>
<div class="ellipse">
<div class="circle"></div>
</div>
<div class="ellipse">
<div class="circle"></div>
</div>
<div class="ellipse">
<div class="circle"></div>
</div>
<div class="ellipse">
<div class="circle"></div>
</div>
</div>
:root {
--duration: 5s;
--half-duration: 2.5s;
--container-size: 210px;
--box-size: 33px;
--box-border-radius: 15%;
}
html,
body {
width: 100%;
height: 100%;
overflow: hidden;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
}
.playground {
width: var(--container-size);
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
}
.ellipse {
width: 165px;
height: 165px;
border-radius: 50%;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
position: relative;
border: none;
transform-style: preserve-3d;
transform: rotateZ(180deg) rotateY(55deg);
}
.ellipse .circle {
width: 33px;
height: 33px;
border-radius: 50%;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
position: absolute;
}
.boll {
margin-left: -25px;
width: 33px;
height: 33px;
position: absolute;
display: block;
transform-origin: -50% center;
border-radius: 50%;
animation: slide var(--half-duration) ease-in-out infinite alternate;
}
.ellipse:nth-child(2) .circle {
animation: move-1 linear infinite;
animation-duration: var(--duration);
}
.ellipse:nth-child(3) .circle {
animation: move-2 linear infinite;
animation-duration: var(--duration);
}
.ellipse:nth-child(4) .circle {
animation: move-3 linear infinite;
animation-duration: var(--duration);
}
.ellipse:nth-child(5) .circle {
animation: move-4 linear infinite;
animation-duration: var(--duration);
}
@keyframes move-4 {
0%, 7.5% {
background-color: deeppink;
transform: rotateZ(360deg) translateX(40px) rotateZ(-360deg) rotateY(-70deg);
box-shadow: -6px -6px rgba(0,0,0,0.09);
}
17.5%, 50%, 82.5% {
background-color: magenta;
transform: rotateZ(180deg) translateX(40px) rotateZ(-180deg) rotateY(-70deg);
box-shadow: -6px -6px rgba(0,0,0,0.09);
}
92.5%, 100% {
background-color: deeppink;
transform: rotateZ(0) translateX(40px) rotateZ(0) rotateY(-70deg);
box-shadow: -6px -6px rgba(0,0,0,0.09);
}
}
@keyframes move-3 {
0%, 15% {
background-color: tomato;
transform: rotateZ(360deg) translateX(40px) rotateZ(-360deg) rotateY(-70deg);
box-shadow: -6px -6px rgba(0,0,0,0.09);
}
25%, 50%, 75% {
background-color: deeppink;
transform: rotateZ(180deg) translateX(40px) rotateZ(-180deg) rotateY(-70deg);
box-shadow: -6px -6px rgba(0,0,0,0.09);
}
85%, 100% {
background-color: tomato;
transform: rotateZ(0) translateX(40px) rotateZ(0) rotateY(-70deg);
box-shadow: -6px -6px rgba(0,0,0,0.09);
}
}
@keyframes move-2 {
0%, 22.5% {
background-color: darkorange;
transform: rotateZ(360deg) translateX(40px) rotateZ(-360deg) rotateY(-70deg);
box-shadow: -6px -6px rgba(0,0,0,0.09);
}
32.5%, 50%, 67.5% {
background-color: tomato;
transform: rotateZ(180deg) translateX(40px) rotateZ(-180deg) rotateY(-70deg);
box-shadow: -6px -6px rgba(0,0,0,0.09);
}
77.5%, 100% {
background-color: darkorange;
transform: rotateZ(0) translateX(40px) rotateZ(0) rotateY(-70deg);
box-shadow: -6px -6px rgba(0,0,0,0.09);
}
}
@keyframes move-1 {
0%, 30% {
background-color: orange;
transform: rotateZ(360deg) translateX(40px) rotateZ(-360deg) rotateY(-70deg);
box-shadow: -6px -6px rgba(0,0,0,0.09);
}
40%, 50%, 60% {
background-color: darkorange;
transform: rotateZ(180deg) translateX(40px) rotateZ(-180deg) rotateY(-70deg);
box-shadow: -6px -6px rgba(0,0,0,0.09);
}
70%, 100% {
background-color: orange;
transform: rotateZ(0) translateX(40px) rotateZ(0) rotateY(-70deg);
box-shadow: -6px -6px rgba(0,0,0,0.09);
}
}
@keyframes slide {
0% {
background-color: deeppink;
transform: translatex(calc(var(--container-size) + (var(--box-size) * 0.5)));
box-shadow: 6px 6px rgba(0,0,0,0.09);
}
100% {
background-color: orange;
transform: translatex(0vw);
box-shadow: 6px 6px rgba(0,0,0,0.09);
}
}
Смотрите здесь: JSFiddle
Эллипсы позволяют вытянуть кривую обскока. Пример - здесь
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Сделал AJAX фильтр записей WordPressДля простоты включил в него только чекбокс, который включает сортировку записей по порядку (ASC)
Копаясь в книге Троэлсена по-поводу делегатов заметил такую забавную штуку что делегаты могут использоваться на манер событий и собсвтенно...