svg+css制作渐现的心
svg+css制作渐现的心
by cacti xu
HTML
<svg class="heart-loader" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 90 90" version="1.1">
<g class="heart-loader__group">
<path class="heart-loader__square" stroke-width="1" fill="none" d="M0,30 0,90 60,90 60,30z"/>
<path class="heart-loader__circle m--left" stroke-width="1" fill="none" d="M60,60 a30,30 0 0,1 -60,0 a30,30 0 0,1 60,0"/>
<path class="heart-loader__circle m--right" stroke-width="1" fill="none" d="M60,60 a30,30 0 0,1 -60,0 a30,30 0 0,1 60,0"/>
<path class="heart-loader__heartPath" stroke-width="2" d="M60,30 a30,30 0 0,1 0,60 L0,90 0,30 a30,30 0 0,1 60,0" />
</g>
</svg>
CSS
*, *:before, *:after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.heart-loader { /* 心形容器居中显示 */
position: absolute;
display: block;
left: 50%;
top: 50%;
margin-top: -90px;
width: 180px;
height: 180px;
overflow: visible;
}
.heart-loader__group { /* */
-webkit-transform-origin: 0 90px;
-ms-transform-origin: 0 90px;
transform-origin: 0 90px;
-webkit-animation: group-anim 7s 1s forwards;
animation: group-anim 7s 1s forwards;
animation-fill-mode: forwards;
-webkit-animation-fill-mode: forwards;
}
.heart-loader__square {/* 刚开始的矩形 */
stroke: #B8B8B8;
stroke-dasharray: 240, 240;
stroke-dashoffset: 240;
-webkit-animation: square-anim 7s 1s forwards;
animation: square-anim 7s 1s forwards;
animation-fill-mode: forwards;
-webkit-animation-fill-mode: forwards;
}
.heart-loader__circle { /* 心形圆 */
stroke: #B8B8B8;
stroke-dasharray: 188.522, 188.522;
stroke-dashoffset: 188.522;
-webkit-transform-origin: 60px 30px;
-ms-transform-origin: 60px 30px;
transform-origin: 60px 30px;
}
.heart-loader__circle.m--left {
-webkit-animation: left-circle-anim 7s 1s forwards;
animation: left-circle-anim 7s 1s forwards;
animation-fill-mode: forwards;
-webkit-animation-fill-mode: forwards;
}
.heart-loader__circle.m--right {
-webkit-animation: right-circle-anim 7s 1s forwards;
animation: right-circle-anim 7s 1s forwards;
animation-fill-mode: forwards;
-webkit-animation-fill-mode: forwards;
}
.heart-loader__heartPath {
stroke: #E21737;
fill: transparent;
stroke-dasharray: 308.522, 308.522;
stroke-dashoffset: 308.522;
-webkit-animation: heart-anim 7s 1s forwards;
animation: heart-anim 7s 1s forwards;
animation-fill-mode: forwards;
-webkit-animation-fill-mode: forwards;
}
@-webkit-keyframes square-anim {
12% {
stroke-dashoffset: 0;
opacity: 1;
}
43% {
stroke-dashoffset: 0;
opacity: 1;
}
85% {
...
JavaScript
//利用js获取路径长度
//var path = document.querySelector('.path');
//var length = path.getTotalLength();