javascript - 检查哪个 child 在视口(viewport)中?

标签 javascript css

检查视口(viewport)中的哪个 child 后,我希望那个 child 获得一些类(class)(“child-animate”),然后当下一个 child 进入视口(viewport)时,我想要下一步获取类(class)('child-animate')等等。

<div class="parent">
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
    <div class="child"></div>
</div>
<script>
$.fn.isInViewport = function() {
  var elementTop = $(this).offset().top;
  var elementBottom = (elementTop + $(this).outerHeight()) * .9;
  var viewportTop = $(window).scrollTop();
  var viewportBottom = (viewportTop + $(window).height()) * .75;

  return elementBottom > viewportTop && elementTop < viewportBottom;
};
</script>

我尝试过这样的事情:

if ($('.parent .child').isInViewport()) {
    $(this).addClass('child-animation');
}

最佳答案

就我个人而言,我会使用 IntersectionObserver。我创建了一个简单的版本,您可以在此处查看。

const children = document.querySelectorAll(".child");

observer = new IntersectionObserver( (entries, observer) => {
  entries.forEach (entry => {
    if (entry.intersectionRatio > 0) {
      // console.log(entry.target.innerHTML + " is visible");
      entry.target.classList.add("animate");
    } else {
      entry.target.classList.remove("animate");
    }
  });
});

children.forEach( child => {
  observer.observe(child);
});
.child {
  height: 120vh;
  background-color: #efefef;
  margin: 1em;
  opacity: 0;
}

.animate {
  animation: fade-in .5s ease-in-out forwards;
}

@keyframes fade-in {
  0% {
    opacity: 0;
    transform: translateY(25px);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}
<div class="parent">
    <div class="child">Child1</div>
    <div class="child">Child2</div>
    <div class="child">Child3</div>
    <div class="child">Child4</div>
</div>

关于javascript - 检查哪个 child 在视口(viewport)中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61553840/

相关文章:

javascript - document.body.innerHTML 问题

javascript - 在 iFrame 中应用 CSS

javascript - 是否可以在可见性隐藏元素上设置 slideDown 动画?

javascript - 如何在 Meteor 中跟踪匿名用户服务器端的数量?

html - 不同的表格和更多的 CSS

html - 无法通过 CSS 将调整大小的大图像居中

javascript - VueJS 数据库操作后刷新内容

html - 中文字符在 mozilla 中比 chrome 和 IE 看​​起来更粗

css - jQuery 一键切换两个元素

javascript - 如何将多个方法绑定(bind)到一个事件?