【问题标题】:How to activate an animation after another animation has finihed如何在另一个动画完成后激活动画
【发布时间】:2018-08-28 16:17:19
【问题描述】:

我有一个代码 sn-p(如下),当您滚动到它时,我想对其进行动画处理。它正在工作,但是为圆圈设置动画的类同时激活,这使得它看起来不对。如何让圆圈正常填充而不是在两个单独的动画中?我需要为此延迟吗?如果我添加延迟然后更改百分比会发生什么?那么延迟会关闭吗?

我正在使用wow.js 在滚动时激活它。

如果您想编辑 codepen,因为我正在使用 SCSS,但显然无法将其包含在我的 sn-p 中。

var wow = new WOW({
  animateClass: 'fill'
});
wow.init();
#sample-text {
  width: 20%;
}

.circle-wrap {
  width: 150px;
  height: 150px;
  background: #ddd;
  border-radius: 50%;
}

.circle-wrap .fill {
  width: 150px;
  height: 150px;
  position: absolute;
  border-radius: 50%;
}

.circle-wrap .mask {
  width: 150px;
  height: 150px;
  position: absolute;
  border-radius: 50%;
  clip: rect(0px, 150px, 150px, 75px);
}

.circle-wrap .fill {
  clip: rect(0px, 75px, 150px, 0px);
  background-color: #00B16A;
}

.circle-wrap .circle .mask.full,
.fill {
  animation: fill ease-in-out 3s;
  transform: rotate(170deg);
}

@keyframes fill {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(170deg);
  }
}

.circle-wrap .inside-circle {
  width: 130px;
  height: 130px;
  border-radius: 50%;
  background: #fff;
  line-height: 130px;
  text-align: center;
  margin-top: 10px;
  margin-left: 10px;
  position: absolute;
  z-index: 100;
  font-weight: 700;
  font-size: 2em;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="sample-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
  in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
  do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
  fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
  aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat
  non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
  ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit
  anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>

<div class="circle-wrap">
  <div class="circle">
    <div class="mask full">
      <div class="fill wow"></div>
    </div>
    <div class="mask half">
      <div class="fill wow"></div>
    </div>
    <div class="inside-circle">
      95%
    </div>
  </div>
</div>

【问题讨论】:

    标签: javascript jquery css css-animations wow.js


    【解决方案1】:

    您可以像这样为动画添加延迟

    animation: fill 3s ease-in-out 1s;
    

    1s 是延迟

    【讨论】:

    • 但显然我的圈子的两半使用同一个类,所以如何在第一个完成动画后激活第二个?
    • 你可以在你的下半场添加一个类并改变延迟 .full{ animation-delay: 6s; }
    • 不幸的是,这也不起作用,因为当您向下滚动时第一次触发该类,即使它有延迟。此外,当您更改百分比时,需要更新交易值,这是我宁愿避免的。老实说,我认为这需要用 jQuery 来完成,但我对如何做到这一点有点迷茫。
    • 你自己做的圈子吗?你应该在这里看到jsfiddle.net/zap4f/1
    【解决方案2】:

    您是否尝试过使用data-wow-delay 选项?

    似乎与data-wow-duration结合使用会很方便

    它们在“高级选项”下被描述为here

    【讨论】:

    • 我怎样才能让它在正确的时间激活呢?肯定有比猜测应该延迟多长时间更好的方法吗?
    • 我的想法是,通过使用 data-wow-duration 设置第一个弧的动画时间,您可以将第二个弧延迟该精确量
    • 嗯,好的。我明白你来自哪里。我去了codepen.io/digitalbydefault/pen/LJYPXw,但它似乎没有工作:(
    【解决方案3】:

    得到这个工作。请看下面:

    这里的 codepen 效果更好:https://codepen.io/digitalbydefault/pen/LJYPXw

    $(window).on('scroll', function() {
      var position = $(this).scrollTop();
      if( position >= $('.circle-wrap').scrollTop() ) {
        $('.trigger').addClass('animate');
      } else {
        $('.trigger').removeClass('animate');
      }
    });
    #sample-text {
      width: 20%;
    }
    
    .circle-wrap {
      width: 150px;
      height: 150px;
      background: #ddd;
      border-radius: 50%;
    }
    .circle-wrap .fill {
      width: 150px;
      height: 150px;
      position: absolute;
      border-radius: 50%;
      clip: rect(0px, 75px, 150px, 0px);
      background-color: #00B16A;
    }
    .circle-wrap .mask {
      width: 150px;
      height: 150px;
      position: absolute;
      border-radius: 50%;
      clip: rect(0px, 150px, 150px, 75px);
    }
    
    .full.ninety,
    .ninety fill {
      transform: rotate(170deg);
    }
    
    .ninety.full.animate,
    .ninety.animate .fill {
      animation: ninety linear 3s forwards;
    }
    
    @keyframes ninety {
      0% {
        transform: rotate(0deg);
      }
      100% {
        transform: rotate(170deg);
      }
    }
    .full.seventy,
    .seventy fill {
      transform: rotate(170deg);
    }
    
    .seventy.full.animate,
    .seventy.animate .fill {
      animation: seventy linear 3s forwards;
    }
    
    @keyframes seventy {
      0% {
        transform: rotate(0deg);
      }
      100% {
        transform: rotate(130deg);
      }
    }
    .circle-wrap .inside-circle {
      width: 130px;
      height: 130px;
      border-radius: 50%;
      background: #fff;
      line-height: 130px;
      text-align: center;
      margin-top: 10px;
      margin-left: 10px;
      position: absolute;
      z-index: 100;
      font-weight: 700;
      font-size: 2em;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="sample-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    </div>
    
    <div class="circle-wrap">
      <div class="circle">
        <div class="mask full seventy trigger">
          <div class="fill"></div>
        </div>
        <div class="mask half seventy trigger">
          <div class="fill"></div>
        </div>
        <div class="inside-circle">
          95%
        </div>
      </div>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多