使用Intersection Observer API结合CSS动画实现滚动监听效果,通过JavaScript检测元素进入视口时添加类名触发过渡动画,推荐采用opacity和transform实现淡入上滑等动效,利用transition控制动画时长并适配prefers-reduced-motion以优化用户体验。
实现滚动监听动画效果,核心是结合 CSS 动画与 JavaScript 检测元素是否进入视口。虽然 CSS 本身无法直接“监听”滚动,但可以通过类名控制配合 JavaScript 实现动态效果。以下是具体实现方法。
现代浏览器推荐使用 Intersection Observer API 来检测元素是否进入可视区域。当元素出现时,给它添加一个类名,触发 CSS 动画。
示例代码:HTML 结构:
我将随滚动出现
CSS 定义动画效果(例如淡入上滑):
.animate-on-scroll {
opacity: 0;
transform: translateY(20px);
trans
ition: opacity 0.6s ease, transform 0.6s ease;
}
.animate-on-scroll.show {
opacity: 1;
transform: translateY(0);
}
JavaScript 监听滚动并添加类名:
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('show');
}
});
});
document.querySelectorAll('.animate-on-scroll').forEach(el => {
observer.observe(el);
});
你可以根据设计需求调整动画类型。以下是一些常用组合:
为了确保页面流畅,注意以下几点:
@media (prefers-reduced-motion: reduce) {
.animate-on-scroll {
transition: none;
}
}
基本上就这些。用好 Intersection Observer 和 CSS transition 或 @keyframes,就能轻松实现自然的滚动动画效果。关键是让动画服务于内容呈现,而不是喧宾夺主。