代码之家  ›  专栏  ›  技术社区  ›  Tobias Glaus

元素两次设置动画看起来很奇怪

  •  1
  • Tobias Glaus  · 技术社区  · 6 年前

    所以我得到了这支笔: https://codepen.io/tobiasglaus/pen/NedpxQ


    每当它“咔哒”一声,一个圆就应该被设置动画。动画中有两次单击,所以我只添加了两次动画,如下所示:

    animation: circle .3s forwards, circle .3s forwards;
    animation-delay: 1.7s, 4.9s;
    

    问题是,圆不再是一个圆,而是一个模糊的正方形:
    How it looks

    但应该是这样的:
    How it should look

    我不能在这样的代码片段中复制这个问题,但是由于我需要提供一个最少的代码示例,下面是它应该如何显示的代码片段。

    注意:当我使用chrome devtools查看动画时,动画看起来是正确的。

    .circle:after{
      content:"";
      position:absolute;
      top:20px;
      left:20px;
      width:50px;
      height:50px;
      border-radius:50%;
      border:2px solid #222f3e;
      animation:circle .3s forwards, circle .3s forwards;
      animation-delay:0s, 1s;
      opacity:0;
      transform:scale(0);
    }
    
    @keyframes circle {
      0%{
        transform:scale(0);
      }
      50%{
        opacity:1;
      }
      100%{
        transform:scale(1);
        opacity:0;
      }
    }
    <div class="circle"></div>
    2 回复  |  直到 6 年前
        1
  •  0
  •   Vanita    6 年前

    你可以利用 animation-iteration-count 财产,就像这样:

    animation: circle .3s forwards;
    animation-iteration-count: 2;
    

    动画迭代计数设置停止前应播放动画循环的次数。您希望单击发生两次,因此我们将值设置为2。

        2
  •  0
  •   Tobias Glaus    6 年前

    我仍然不知道为什么圈变得奇怪,但我设法想出了一个可行的解决方案:

    这就是我所拥有的:

    animation: circle .3s forwards, circle .3s forwards;
    animation-delay: 1.7s, 4.9s;
    

    动画:

    @keyframes circle {
      0%{
        transform:scale(0);
      }
      50%{
        opacity:1;
      }
      100%{
        transform:scale(1);
        opacity:0;
      }
    }
    

    我没有两次调用动画,而是创建了一个大型动画:

    animation: circle 3.5s forwards;
    animation-delay:1.7s;
    

    这就是动画:

    @keyframes circle{
      0%{
        transform:scale(0);
      }
      4%{
        opacity:1;
      }
      8%{
        transform:scale(1);
        opacity:0;
      }
      92%{
        transform:scale(0);
        opacity:0;
      }
      96%{
        opacity:1;
      }
      100%{
        transform:scale(1);
        opacity:0;
      }
    }
    

    因此,初始动画持续时间0.3s现在等于8%,动画之间的动画延迟等于动画中无内容的74%。