<div class="inner">
  <div class="block js-fade fade-in">その場でフェードイン</div>
  <div class="block js-fade fade-in-down">上から下にフェードイン</div>
  <div class="block js-fade fade-in-up">下から上にフェードイン</div>
  <div class="block js-fade fade-in-left">左から右にフェードイン</div>
  <div class="block js-fade fade-in-right">右から左にフェードイン</div>
</div>
/* インナーのCSS */
.inner {
  max-width: calc(1000px + 20px * 2);
  width: 100%;
  margin: 300px auto 500px;
}

/* ブロックのCSS */
.block {
  display: flex;
  justify-content: center;
  align-items: center;
  aspect-ratio: 1 / 1;
  max-width: 300px;
  max-height: 300px;
  width: 100%;
  height: 100%;
  margin: 0 auto;
  background-color: #5cc0ef;
  font-size: 16px;
  line-height: 1.5;
  color: #fff;
  opacity: 0;

  &:not(:first-child) {
    margin-top: 300px;
  }
}

/* フェードインのCSS */
.active.fade-in {
  /* 1s でアニメーションスピードを管理 */
  animation: fadeIn 1s ease-in forwards;
}

@keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

.active.fade-in-down {
  opacity: 0;
  /* 1s でアニメーションスピードを管理 */
  animation: fadeInDown 1s ease-in forwards;
}

@keyframes fadeInDown {
  from {
    opacity: 0;
    /* transform でアニメーションの方向を管理 */
    transform:translate3d(0, -70px, 0);
  }
  to {
    opacity: 1;
    transform:translateZ(0);
  }
}

.active.fade-in-up {
  opacity: 0;
  /* 1s でアニメーションスピードを管理 */
  animation: fadeInUp 1s ease-in forwards;
}

@keyframes fadeInUp {
  from {
    opacity: 0;
    /* transform でアニメーションの方向を管理 */
    transform:translate3d(0, 70px, 0);
  }
  to {
    opacity: 1;
    transform:translateZ(0);
  }
}

.active.fade-in-left {
  opacity: 0;
  /* 1s でアニメーションスピードを管理 */
  animation: fadeInLeft 1s ease-in forwards;
}

@keyframes fadeInLeft {
  from {
    opacity: 0;
    /* transform でアニメーションの方向を管理 */
    transform:translate3d(-70px, 0, 0);
  }
  to {
    opacity: 1;
    transform:translateZ(0);
  }
}

.active.fade-in-right {
  opacity: 0;
  /* 1s でアニメーションスピードを管理 */
  animation: fadeInRight 1s ease-in forwards;
}

@keyframes fadeInRight {
  from {
    opacity: 0;
    /* transform でアニメーションの方向を管理 */
    transform:translate3d(70px, 0, 0);
  }
  to {
    opacity: 1;
    transform:translateZ(0);
  }
}
View Compiled
jQuery(function ($) {
  /* ウィンドウをスクロールしたら実行 */
  $(window).scroll(function() {
    /* 指定した要素(.js-fade)を繰り返し実行 */
    $('.js-fade').each(function() {
      /* .js-fade の場所を取得 */
      var target = $(this).offset().top;

      /* 現在のスクロール位置を取得 */
      var scroll = $(window).scrollTop();

      /* 画面(ブラウザ)の縦の長さを取得 */
      var screen_height = $(window).height();

      /* 対象の要素が基準を超えたらフェードイン */
      if (scroll > target - screen_height / 2 - 100){
        $(this).addClass('active');
      }
    });
  });
});

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://code.jquery.com/jquery-3.7.1.js