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();