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);
});