Intersection observer
Puedes usar la API del Intersection observer solo con CSS de manera fácil y rápida.
Advertencia
Actualmente, no es 100% compatible con todos los navegadores, puedes ver en caniuse.com en que navegadores si funciona
<div></div>
<div></div>
<div></div>
<div></div>
<style>
div{
width: 300px;
height: 500px;
margin-bottom: 10px;
background-color: red;
animation-timeline: view();
animation-fill-mode: both;
}
div:nth-child(even){
animation-name: show;
/* te permite decidir dónde comienza la animación (entry) y dónde termina (cover) */
animation-range: entry 5% cover 50%
}
div:nth-child(odd){
animation-name: showInverse;
animation-range: entry 10% cover 50%
}
@keyframes show{
from{
opacity: 0;
transform: translateX(-300px);
}
to{
opacity: 1;
transform: translateX(0px);
}
}
@keyframes showInverse{
from{
opacity: 0;
transform: translateX(300px);
}
to{
opacity: 1;
transform: translateX(0);
}
}
</style>