<div class="container">
  <section class="section section--placehoder">
    <h2>Lorem ipsum dolor sit amet consectetur adipisicing eli</h2>
    <p>Ullam, soluta quo ab deleniti, rem explicabo consequuntur assumenda ex nobis a optio labore fugiat molestias voluptatum. Sapiente minima sunt eius quasi reiciendis eveniet quam sit ea porro, qui dolores eos totam, aliquid, perspiciatis esse voluptas perferendis. Est quod dolor dolore tenetur?</p>
  </section>

  <section class="section section--cliped">
    <div class="section__item section__item--show">
      <img class="section__image" src="https://images.unsplash.com/photo-1573865526739-10659fec78a5?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=700&q=80" alt="">
      </div>
    <div class="section__item">
      <img class="section__image" src="https://images.unsplash.com/photo-1591510939462-a90a753b0329?ixlib=rb-1.2.1&auto=format&fit=crop&w=700&q=80" alt="">
    </div>
    <div class="section__item">
      <img class="section__image" src="https://images.unsplash.com/photo-1460572894071-bde5697f7197?ixlib=rb-1.2.1&auto=format&fit=crop&w=700&q=80" alt="">
      </div>
    <div class="section__item">
      <img class="section__image" src="https://images.unsplash.com/photo-1496890666403-e6cf521841e6?ixlib=rb-1.2.1&auto=format&fit=crop&w=700&q=80" alt="">
      </div>
  </section>

  <section class="section section--placehoder">
    <h2>Lorem ipsum dolor sit amet consectetur adipisicing eli</h2>
    <p>Ullam, soluta quo ab deleniti, rem explicabo consequuntur assumenda ex nobis a optio labore fugiat molestias voluptatum. Sapiente minima sunt eius quasi reiciendis eveniet quam sit ea porro, qui dolores eos totam, aliquid, perspiciatis esse voluptas perferendis. Est quod dolor dolore tenetur?</p>
    <p>Ullam, soluta quo ab deleniti, rem explicabo consequuntur assumenda ex nobis a optio labore fugiat molestias voluptatum. Sapiente minima sunt eius quasi reiciendis eveniet quam sit ea porro, qui dolores eos totam, aliquid, perspiciatis esse voluptas perferendis. Est quod dolor dolore tenetur?</p>
    <p>Ullam, soluta quo ab deleniti, rem explicabo consequuntur assumenda ex nobis a optio labore fugiat molestias voluptatum. Sapiente minima sunt eius quasi reiciendis eveniet quam sit ea porro, qui dolores eos totam, aliquid, perspiciatis esse voluptas perferendis. Est quod dolor dolore tenetur?</p>
  </section>
  
</div>
:root {
  --scroll-width: 17px;
}

body {
  margin: 0;
}

.container {
  width: 80%;
  margin: 0 auto;
}

.section--cliped {
  position: relative;
  clip-path: inset(-100vh 0);
  transition: clip-path 0.5s;
  height: calc(var(--vh, 1vh) * 400);
}

.section--uncliped {
  clip-path: inset(-100vh calc(50% - 50vw + var(--scroll-width) / 2));
}

.section--uncliped .section__item {
  position: fixed;
  top: 0;
  left: 0;
}

.section__item {
  width: calc(100vw - var(--scroll-width));
  height: calc(var(--vh, 1vh) * 100);
  margin-left: calc(50% - 50vw + var(--scroll-width) / 2);
  opacity: 0;
  transition: opacity 1s;
}

.section__item--show {
  opacity: 1;
}

.section__image {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.section--placehoder h2 {
  font-size: 4em;
}

.section--placehoder p {
  font-size: 2em;
}
const clipedSection = document.querySelector(".section--cliped");
const items = [
  ...document.querySelectorAll(".section--cliped > .section__item")
];

const controller = new ScrollMagic.Controller();

new ScrollMagic.Scene({
  offset: 0,
  triggerHook: 0,
  triggerElement: clipedSection,
  duration: (items.length - 1) * 100 + "%"
})
  // .addIndicators() // add indicators (requires plugin)
  .setClassToggle(clipedSection, "section--uncliped")
  .on("progress", (e) => {
    const idx = Math.min(
      Math.floor(e.progress * items.length),
      items.length - 1
    );

    items[idx].classList.add("section__item--show");

    if (e.scrollDirection === "REVERSE" && idx < items.length - 1) {
      items[idx + 1].classList.remove("section__item--show");
    }
  })
  .addTo(controller);

// =====================
function update() {
  const sbw =
    window.innerWidth - (document.documentElement || document.body).clientWidth;

  document.body.style.setProperty("--scroll-width", sbw + "px");
  document.body.style.setProperty("--vh", window.innerHeight * 0.01 + "px");
}

update();
window.addEventListener("resize", update);

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/ScrollMagic.min.js
  2. https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/plugins/debug.addIndicators.min.js