为什么我的React组件中AOS动画初始化后完全没反应?
我在React项目里按照文档引入了aos库,初始化也写了,但元素就是没动画效果。检查了npm包安装没问题,也试过手动调用AOS.init(),还是没反应…
这是我的代码片段:
import AOS from 'aos';
import 'aos/dist/aos.css';
function HeroSection() {
useEffect(() => {
AOS.init({ duration: 1000 });
}, []);
return (
<div data-aos="fade-up" className="hero">
欢迎使用我们的服务!
</div>
);
}
控制台没报错,元素也没有添加aos-animate类。是不是哪里漏了初始化步骤?或者需要配合react-aos的封装组件用?
AOS.init()的调用时机。React 的组件可能会被多次渲染,而 AOS 的初始化只应该执行一次。你现在的写法会导致每次组件重新渲染时都重新初始化 AOS,这会覆盖之前的配置,甚至可能导致动画失效。解决方法很简单:把
AOS.init()放到一个缓存起来的逻辑里,确保它只执行一次。可以用useEffect结合一个标志变量来实现。另外,AOS 默认是监听页面滚动事件的,如果你页面没有足够的内容可以滚动,也可能看不到效果。可以通过设置
AOS.refresh()来强制刷新检测。以下是修改后的代码:
这样写就能保证 AOS 只初始化一次,并且刷新检测确保动画生效。如果还是没反应,检查一下是否有足够的滚动空间,或者给页面加个高度试试。