面试题答案
一键面试实现思路
- 状态管理:在组件中使用
useState
钩子来管理元素的可见性状态以及动画是否完成的状态。 - 样式设置:利用CSS的
opacity
属性和transition
属性来实现淡入动画。初始时opacity
设为0,点击按钮后设为1,并设置合适的transition
属性来控制动画时间和效果。 - 事件处理:为按钮添加点击事件处理函数,在函数中更新元素可见性状态,并利用
useEffect
钩子在动画结束时更新动画完成状态。
关键代码片段
import React, { useState, useEffect } from 'react';
const MyComponent = () => {
const [isVisible, setIsVisible] = useState(false);
const [animationCompleted, setAnimationCompleted] = useState(false);
const handleClick = () => {
setIsVisible(true);
};
useEffect(() => {
const handleAnimationEnd = () => {
setAnimationCompleted(true);
};
const element = document.getElementById('my-element');
if (element) {
element.addEventListener('animationend', handleAnimationEnd);
}
return () => {
if (element) {
element.removeEventListener('animationend', handleAnimationEnd);
}
};
}, [isVisible]);
return (
<div>
<button onClick={handleClick}>点击显示</button>
<div
id="my-element"
style={{
opacity: isVisible ? 1 : 0,
transition: 'opacity 1s ease-in-out'
}}
>
要显示的内容
</div>
{animationCompleted && <p>动画已完成</p>}
</div>
);
};
export default MyComponent;
上述代码中,isVisible
控制元素的可见性,animationCompleted
记录动画是否完成。点击按钮时,isVisible
变为true
,元素开始淡入动画。useEffect
钩子监听isVisible
变化,在动画结束时更新animationCompleted
。同时通过CSS的opacity
和transition
实现淡入效果。