css
.ani-fadeIn{animation: fadeIn .5s ease-in-out both;}
@keyframes fadeIn {0%{opacity: 0;}100%{opacity: 1;}}
.ani-fadeOut{animation: fadeOut .5s linear both;}
@keyframes fadeOut {0%{opacity: 1;}100%{opacity: 0;}}
组件
function Example(){
const [nextStep,setNextStep] = useState(false)
const [aniType,setAniType] = useState(false)
return(
<>
<button onClick={()=>setNextStep(true)}>显示</button>
{
nextStep &&
<>
<button onClick={() => setAniType(true)}>隐藏</button>
<div
className={aniType ? 'ani-fadeOut': 'ani-fadeIn'}
onAnimationEnd={(e) => {
if (e.animationName == "fadeOut") {
setNextStep(false);
setAniType(false);
}
}}
>123</div>
</>
}
</>
)
}
如上代码是我写的效果,有没有更好的写法
(可以的话,最好不要用库,例如react-transition-group)
不想用库的话,你可以自定义Hook来管理动画类名:
import React, { useState, useCallback } from 'react';
import './App.css';
// 自定义 Hook,用于管理动画
function useAnimation(animationClassNames) {
const [animationClassName, setAnimationClassName] = useState('');
const triggerAnimation = useCallback((animationName, onEnd) => {
setAnimationClassName(animationClassNames[animationName]);
const onAnimationEnd = (e) => {
if (e.animationName === animationName) {
setAnimationClassName('');
onEnd?.();
}
};
return onAnimationEnd;
}, [animationClassNames]);
return [animationClassName, triggerAnimation];
}
function Example() {
const [isVisible, setIsVisible] = useState(false);
const [animationClassName, triggerAnimation] = useAnimation({
fadeIn: 'ani-fadeIn',
fadeOut: 'ani-fadeOut',
});
const handleShow = () => {
setIsVisible(true);
};
const handleHide = () => {
triggerAnimation('fadeOut', () => {
setIsVisible(false);
});
};
return (
<>
<button onClick={handleShow}>显示</button>
{isVisible && (
<>
<button onClick={handleHide}>隐藏</button>
<div className={animationClassName}>123</div>
</>
)}
</>
);
}
export default Example;
你可以用用animate.js
这类库来实现动画控制
Animate.js
用起来就像
cosnt animeInstance = anime({
targets: targetRef.current,
translateX: 250,
easing: 'linear',
duration: 5000
})
if ( something ){
animeInstance.pause()
}
本文向大家介绍hbase的rowkey怎么创建好?列族怎么创建比较好?相关面试题,主要包含被问及hbase的rowkey怎么创建好?列族怎么创建比较好?时的应答技巧和注意事项,需要的朋友参考一下 解答: hbase存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性) 一个列族在数据底层是一个文件
为什么React中shouldComponentUpdata,React.memo这些使用浅比较,而是===
①进入APP主界面,点击左上角的地图列表按钮,如上图红框处按钮 ②地图列表如上图,在列表上可以选择不同的地图列表切换不同的数据地图,点击新建地图按钮如上图红框中,即可进入创建地图 ③创建地图,先填入地图名称(地图的简短标识,必须填写),点击保存即可新建地图操作,如上图。
类似这样,飘忽不定的感觉
问题内容: 我有一个CSS3动画,需要单击才能重新启动。这是一个显示剩余时间的条形图。我正在使用scaleY(0)转换来创建效果。 现在,我需要通过将条恢复到scaleY(1)并重新将其转到scaleY(0)来重新启动动画。我第一次尝试设置scaleY(1)失败,因为要花费相同的15秒才能将其恢复到全长。即使我将持续时间更改为0.1秒,我也需要延迟或链接scaleY(0)的分配,以使补充条完成。对
我编写了下面的代码来从ArrayList中获取重复的元素。我的aerospikePIDs列表没有任何重复的值,但是当我执行下面的代码时,它仍然在读取if条件。