jquery - 滚动时延迟动画

标签 jquery css animation css-transitions delay

我正在尝试在用户滚动时创建动画,但我也想交错它们,因为它们不会同时发生,而是一个接一个快速连续发生。

我正在使用以下代码向触发 css 动画的 div 添加一个类,然后我尝试使用 setTimeout 将下一个动画延迟一点。我想因为它在一个 $.each() 循环中,所以它会在每次超时时触发,但它们都会在时间点淡入...
JSFiddle

编辑我相信我需要在 JS 中执行此操作,因为我在页面上有许多动画,其中混合了各种动画类型,并且需要将类的添加延迟几毫秒。

/**
 * Check if Animation is currently in view
 */
function anim_in_view() {
  var window_height = $(window).height();
  var window_top_position = $(window).scrollTop();
  var window_bottom_position = (window_top_position + window_height);
  var $animations = $('body .animate');

  if ($animations.length) {
    $.each($animations, function() {
      var $elm = $(this);
      var element_height = $elm.outerHeight();
      var element_top_position = $elm.offset().top + 50;
      var element_bottom_position = (element_top_position + element_height);

      setTimeout(function() {
        if ((element_bottom_position >= window_top_position) &&
          (element_top_position <= window_bottom_position)) {
          // $elm.delay( 2000 ).addClass( 'visible' );
          $elm.addClass('visible');
        }
      }, 1000);
    });
  }
}
$(window).on('load scroll resize', anim_in_view);
.flex {
  margin-top: 1000px;
  margin-bottom: 500px;
  display: -webkit-flex;
  display: flex;
}
.flex > div {
  width: 33.33%;
  height: 200px;
}
.red {
  background: #f00;
}
.green {
  background: #0f0;
}
.blue {
  background: #00f;
}
.animate-opacity {
  opacity: 0;
  -webkit-transition: opacity 1s ease-in-out;
  transition: opacity 2s ease-in-out;
}
.animate-opacity.visible {
  opacity: 1;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="fadeIns" class="flex">
  <div class="animate animate-opacity red"></div>
  <div class="animate animate-opacity green"></div>
  <div class="animate animate-opacity blue"></div>
</div>

最佳答案

您可以使用transition-delay 来实现:

.animate-opacity:nth-child(2) {
  transition-delay: 1s;
}
.animate-opacity:nth-child(3) {
  transition-delay: 2s;
}

/**
 * Check if Animation is currently in view
 */
function anim_in_view() {
  var window_height = $(window).height();
  var window_top_position = $(window).scrollTop();
  var window_bottom_position = (window_top_position + window_height);
  var $animations = $('body .animate');

  if ($animations.length) {
    $.each($animations, function() {
      var $elm = $(this);
      var element_height = $elm.outerHeight();
      var element_top_position = $elm.offset().top + 50;
      var element_bottom_position = (element_top_position + element_height);

      if ((element_bottom_position >= window_top_position) &&
        (element_top_position <= window_bottom_position)) {
        // $elm.delay( 2000 ).addClass( 'visible' );
        $elm.addClass('visible');
      }
    });
  }
}
$(window).on('load scroll resize', anim_in_view);
.flex {
  margin-top: 1000px;
  margin-bottom: 500px;
  display: -webkit-flex;
  display: flex;
}
.flex > div {
  width: 33.33%;
  height: 200px;
}
.red {
  background: #f00;
}
.green {
  background: #0f0;
}
.blue {
  background: #00f;
}
.animate-opacity {
  opacity: 0;
  -webkit-transition: opacity 1s ease-in-out;
  transition: opacity 2s ease-in-out;
}
.animate-opacity:nth-child(2) {
  transition-delay: 1s;
}
.animate-opacity:nth-child(3) {
  transition-delay: 2s;
}
.animate-opacity.visible {
  opacity: 1;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="fadeIns" class="flex">
  <div class="animate animate-opacity red"></div>
  <div class="animate animate-opacity green"></div>
  <div class="animate animate-opacity blue"></div>
</div>

关于jquery - 滚动时延迟动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39414534/

相关文章:

css - Firefox 中文本上方出现链接下划线?

android - 如何根据来自api的位置在android中的谷歌地图上移动标记

javascript - 无法使用 Parse Cloud Code 和 Mandrill 发送电子邮件

jquery - Bootstrap 模式使用 jQuery Tablesorter 选择错误的项目

jquery - 使用jquery搜索并替换多个特殊字符

css - 使用 CSS 检查滚动

html - 将导航栏和背景颜色添加到 CSS 后,H1 无法运行

ios - 如何使用自定义动画将一个 UI 元素替换为另一个 UI 元素?

javascript - 使用 Javascript,如何在点击 anchor 标记后为元素的移动设置动画?

jQuery从html标签获取文本问题