在Scroll JS上制作动画

时间:2019-01-21 11:56:39

标签: javascript animation onscroll

我是JavaScript的新手,正在尝试将一些动画滚动添加到站点。

我有多个div,每个div具有唯一的类名,并且每个div具有相同的 .section 类。

我想为滚动中的每个 .section 设置动画,而不触发其他 .sections

<section class="home__one section></section>
<section class="home__two section></section>
<section class="home__three section></section>
<section class="home__four section></section>

$(window).on("scroll",function(){
    var winTop = $(this).scrollTop();
    var section = $(".section").offset().top;

    if(winTop >= section-400) {
      $(".section").addClass("animate");
    };
});

上面的代码显然会在第一个 .section 到达滚动条上的每个位置时触发。

当我看到一个 .section 时,我无法确定如何触发它。

我可能完全以错误的方式进行此操作,因此,如果我愿意,将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在这里,您需要遍历所有可用部分,并且无论匹配哪个部分,都必须应用该类。

if (winTop >= section - 400) {
  $(".section").addClass("animate");
};

此外,;语句的末尾没有if

您的最终代码如下:

$(window).on("scroll", function(){
  var winTop = $(this).scrollTop();

  $(".section").each(function () {
    var section = $(this).offset().top;
    if(winTop >= section-400) {
      $(this).addClass("animate");
    }
  });
});

我建议从所有其他部分中删除类animate。因此,以这种方式更改代码:

$(window).on("scroll", function(){
  var winTop = $(this).scrollTop();

  $(".section").removeClass("animate").each(function () {
    var section = $(this).offset().top;
    if(winTop >= section-400) {
      $(this).addClass("animate");
    }
  });
});

此外,一旦开始添加类,就不希望其他人在其中添加该类。因此,也要提供最高价值。

$(window).on("scroll", function(){
  var winTop = $(this).scrollTop();

  $(".section").removeClass("animate").each(function () {
    var section = $(this).offset().top;
    if(winTop >= section-400) {
      $(".section").removeClass("animate");
      $(this).addClass("animate");
    }
  });
});

工作片段:

$(window).on("scroll", function(){
  var winTop = $(this).scrollTop();

  $(".section").removeClass("animate").each(function () {
    var section = $(this).offset().top;
    if(winTop >= section-400) {
      $(".section").removeClass("animate");
      $(this).addClass("animate");
    }
  });
});
.section {
  height: 750px;
}
.animate {
  background: #960;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section class="home__one section">Section one</section>
<section class="home__two section">Section two</section>
<section class="home__three section">Section three</section>
<section class="home__four section">Section four</section>

预览:

通过缓慢滚动可以看到工作的演示:JSBin Demo