You*_*saf 13
您可以使用Intersection Observer API来实现所需的结果,而不是使用jQuery事件侦听器。scroll
您可以根据您的需要调整threshold选项。IntersectionObserver此选项用于指示应在目标可见性的多少百分比下执行观察者的回调。我把它设置为70%。
const observerOptions = {
root: null,
rootMargin: "0px",
threshold: 0.7
};
function observerCallback(entries, observer) {
entries.forEach(entry => {
if (entry.isIntersecting) {
// fade in observed elements that are in view
entry.target.classList.replace('fadeOut', 'fadeIn');
} else {
// fade out observed elements that are not in view
entry.target.classList.replace('fadeIn', 'fadeOut');
}
});
}
const observer = new IntersectionObserver(observerCallback, observerOptions);
const fadeElms = document.querySelectorAll('.fade');
fadeElms.forEach(el => observer.observe(el));Run Code Online (Sandbox Code Playgroud)
.fade {
margin: 50px;
padding: 50px;
background-color: lightgreen;
transition: opacity 0.7s ease-in;
}
.fadeOut { opacity: 0; }
.fadeIn { opacity: 1; }Run Code Online (Sandbox Code Playgroud)
<div class="container">
<div class="fade fadeOut">Element 1</div>
<div class="fade fadeOut">Element 2</div>
<div class="fade fadeOut">Element 3</div>
<div class="fade fadeOut">Element 4</div>
<div class="fade fadeOut">Element 5</div>
<div class="fade fadeOut">Element 6</div>
<div class="fade fadeOut">Element 7</div>
<div class="fade fadeOut">Element 8</div>
<div class="fade fadeOut">Element 9</div>
<div class="fade fadeOut">Element 10</div>
</div>Run Code Online (Sandbox Code Playgroud)