JSFiddle - React, Tailwind, and code Playground

by kthornbloom

HTML

<div class="container">


<div class="lameboringcrap">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eligendi qui ratione sunt laboriosam repellendus ducimus fugiat dolorum totam, unde sit dolor eos magni laudantium soluta doloribus culpa corporis voluptatibus ipsa.
</div>

<div class="superfunanimationcrap">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempora soluta facilis voluptate similique magnam illo perferendis nulla molestias dignissimos impedit. Iure illo modi earum perspiciatis accusantium cumque eveniet libero maxime.
</div>
<div class="superfunanimationcrap">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempora soluta facilis voluptate similique magnam illo perferendis nulla molestias dignissimos impedit. Iure illo modi earum perspiciatis accusantium cumque eveniet libero maxime.
</div>
<div class="superfunanimationcrap">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempora soluta facilis voluptate similique magnam illo perferendis nulla molestias dignissimos impedit. Iure illo modi earum perspiciatis accusantium cumque eveniet libero maxime.
</div>
</div>

CSS

.container {
  width: 200px;
}

.lameboringcrap {
  height: 900px;
  background:linear-gradient(to top, #ccc, #fff);
}

.superfunanimationcrap {
  height: 400px;
  background:blue;
}

.animate {
  background: red;
  transition: 2s .5s;
}

JavaScript

const myImgs = document.querySelectorAll('.superfunanimationcrap');

observer = new IntersectionObserver(entries => {
  entries.forEach(entry => {
    if (entry.intersectionRatio > 0) {
      entry.target.classList.add('animate');
      observer.unobserve(entry.target);
    } else {
      console.log('out of view');
    }
  });
});

myImgs.forEach(image => {
  observer.observe(image);
});