Покажем на примере, как можно реализовать анимацию средствами svg-графики с использованием стилей css. Пример смотрите ниже.
Для реализации пример понадобится файл стилей:
*, *:before, *:after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
svg {
display: block;
margin: 1em auto;
}
.heart-loader {
width: 180px;
height: 180px;
overflow: visible;
}
.heart-loader__group {
-webkit-transform-origin: 0 90px;
transform-origin: 0 90px;
-webkit-animation: group-anim 7s 1s infinite;
animation: group-anim 7s 1s infinite;
}
.heart-loader__square {
stroke: #B8B8B8;
stroke-dasharray: 240, 240;
stroke-dashoffset: 240;
-webkit-animation: square-anim 7s 1s infinite;
animation: square-anim 7s 1s infinite;
}
.heart-loader__circle {
stroke: #B8B8B8;
stroke-dasharray: 188.522, 188.522;
stroke-dashoffset: 188.522;
-webkit-transform-origin: 60px 30px;
transform-origin: 60px 30px;
}
.heart-loader__circle.m--left {
-webkit-animation: left-circle-anim 7s 1s infinite;
animation: left-circle-anim 7s 1s infinite;
}
.heart-loader__circle.m--right {
-webkit-animation: right-circle-anim 7s 1s infinite;
animation: right-circle-anim 7s 1s infinite;
}
.heart-loader__heartPath {
stroke: #E21737;
fill: transparent;
stroke-dasharray: 308.522, 308.522;
stroke-dashoffset: 308.522;
-webkit-animation: heart-anim 7s 1s infinite;
animation: heart-anim 7s 1s infinite;
}
@-webkit-keyframes square-anim {
12% {
stroke-dashoffset: 0;
}
43% {
stroke-dashoffset: 0;
opacity: 1;
}
85% {
stroke-dashoffset: 0;
opacity: 0;
}
100% {
stroke-dashoffset: 0;
opacity: 0;
}
}
@keyframes square-anim {
12% {
stroke-dashoffset: 0;
}
43% {
stroke-dashoffset: 0;
opacity: 1;
}
85% {
stroke-dashoffset: 0;
opacity: 0;
}
100% {
stroke-dashoffset: 0;
opacity: 0;
}
}
@-webkit-keyframes left-circle-anim {
12% {
stroke-dashoffset: 188.522;
}
31% {
stroke-dashoffset: 0;
-webkit-transform: translateY(0);
transform: translateY(0);
}
41% {
stroke-dashoffset: 0;
-webkit-transform: translateY(-30px);
transform: translateY(-30px);
}
43% {
stroke-dashoffset: 0;
-webkit-transform: translateY(-30px);
transform: translateY(-30px);
opacity: 1;
}
85% {
stroke-dashoffset: 0;
-webkit-transform: translateY(-30px);
transform: translateY(-30px);
opacity: 0;
}
100% {
stroke-dashoffset: 0;
-webkit-transform: translateY(-30px);
transform: translateY(-30px);
opacity: 0;
}
}
@keyframes left-circle-anim {
12% {
stroke-dashoffset: 188.522;
}
31% {
stroke-dashoffset: 0;
-webkit-transform: translateY(0);
transform: translateY(0);
}
41% {
stroke-dashoffset: 0;
-webkit-transform: translateY(-30px);
transform: translateY(-30px);
}
43% {
stroke-dashoffset: 0;
-webkit-transform: translateY(-30px);
transform: translateY(-30px);
opacity: 1;
}
85% {
stroke-dashoffset: 0;
-webkit-transform: translateY(-30px);
transform: translateY(-30px);
opacity: 0;
}
100% {
stroke-dashoffset: 0;
-webkit-transform: translateY(-30px);
transform: translateY(-30px);
opacity: 0;
}
}
@-webkit-keyframes right-circle-anim {
12% {
stroke-dashoffset: 188.522;
}
31% {
stroke-dashoffset: 0;
-webkit-transform: translateX(0);
transform: translateX(0);
}
41% {
stroke-dashoffset: 0;
-webkit-transform: translateX(30px);
transform: translateX(30px);
}
43% {
stroke-dashoffset: 0;
-webkit-transform: translateX(30px);
transform: translateX(30px);
opacity: 1;
}
85% {
stroke-dashoffset: 0;
-webkit-transform: translateX(30px);
transform: translateX(30px);
opacity: 0;
}
100% {
stroke-dashoffset: 0;
-webkit-transform: translateX(30px);
transform: translateX(30px);
opacity: 0;
}
}
@keyframes right-circle-anim {
12% {
stroke-dashoffset: 188.522;
}
31% {
stroke-dashoffset: 0;
-webkit-transform: translateX(0);
transform: translateX(0);
}
41% {
stroke-dashoffset: 0;
-webkit-transform: translateX(30px);
transform: translateX(30px);
}
43% {
stroke-dashoffset: 0;
-webkit-transform: translateX(30px);
transform: translateX(30px);
opacity: 1;
}
85% {
stroke-dashoffset: 0;
-webkit-transform: translateX(30px);
transform: translateX(30px);
opacity: 0;
}
100% {
stroke-dashoffset: 0;
-webkit-transform: translateX(30px);
transform: translateX(30px);
opacity: 0;
}
}
@-webkit-keyframes group-anim {
43% {
-webkit-transform: rotate(0);
transform: rotate(0);
}
54% {
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
}
90% {
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
opacity: 1;
}
97% {
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
opacity: 0;
}
100% {
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
opacity: 0;
}
}
@keyframes group-anim {
43% {
-webkit-transform: rotate(0);
transform: rotate(0);
}
54% {
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
}
90% {
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
opacity: 1;
}
97% {
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
opacity: 0;
}
100% {
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
opacity: 0;
}
}
@-webkit-keyframes heart-anim {
55% {
stroke-dashoffset: 308.522;
fill: transparent;
}
70% {
stroke-dashoffset: 0;
fill: transparent;
}
87% {
stroke-dashoffset: 0;
fill: #E21737;
}
100% {
stroke-dashoffset: 0;
fill: #E21737;
}
}
@keyframes heart-anim {
55% {
stroke-dashoffset: 308.522;
fill: transparent;
}
70% {
stroke-dashoffset: 0;
fill: transparent;
}
87% {
stroke-dashoffset: 0;
fill: #E21737;
}
100% {
stroke-dashoffset: 0;
fill: #E21737;
}
}
.other {
position: absolute;
left: 0;
bottom: 0.5rem;
width: 100%;
text-align: right;
}
.other__link {
font-size: 1.3rem;
margin: 0 1rem;
}
И собственно сам svg-код:
Похожие публикации
2016-03-25 • Просмотров [ 1723 ]