SVG笔画,CSS动画:并非所有笔画都向同一方向移动

问题描述 投票:1回答:1

下面的动画非常简单,所以我想。您会注意到其中一个笔划(只有一个)开始向后移动。我不明白为什么会这样。

.container {
  width: 350px;
  height: 350px;
}
#path1 {
  stroke-dasharray: 170;
  animation: animate1 5s infinite linear forwards;
}

@keyframes animate1 {
  50% {
    stroke-dashoffset: -16.4%;
    stroke-dasharray: 0 87.5%;
  }
  100% {
    stroke-dashoffset: -100%;
    stroke-dasharray: 170;
  }
}
<div class="container">
    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
         width="100%" height="100%" viewBox="0 0 1000 1000" xml:space="preserve">
        <a xlink:href="#">
            <path id="path2" fill="#000" d="M173,226h400v400H173V226z"/>
            <path id="path1" fill="none" stroke="#000" d="M108,171h500v500H108V171z"/>
        </a>    
    </svg>
</div>

感谢您的帮助,不胜感激。

css svg svg-animate
1个回答
0
投票

路径path1的总长度为2000 px

如果要以4个相等的间隔获得4个线段,那么一个笔划的长度将等于总长度的八分之一:2000 / 8 = 250 px

在这种情况下,写stroke-dasharray =“ 250,250”

通过将stroke-dashoffset2000px减少到零来实现动画

.container {
  width: 350px;
  height: 350px;
}
#path1 {
  stroke-dasharray: 250;
  stroke-dashoffset:2000;
  animation: animate1 5s infinite linear forwards;
}

@keyframes animate1 {
  
  100% {
    stroke-dashoffset: 0;
    stroke-dasharray: 250;
  }
}
<div class="container">
    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
         width="100%" height="100%" viewBox="0 0 1000 1000" xml:space="preserve">
        <a xlink:href="#">
            <path id="path2" fill="#000" d="M173,226h400v400H173V226z"/>
            <path id="path1" fill="none" stroke="#000" d="M108,171h500v500H108V171z"/>
        </a>    
    </svg>
</div>
© www.soinside.com 2019 - 2024. All rights reserved.