【发布时间】:2020-09-02 13:37:55
【问题描述】:
我有包装器 React 组件,它使用 react-spring 和可见性传感器使其子组件从右侧淡入并将不透明度从 0 更改为 1。 useEffect 和 useState 都使孩子在第一次滚动后只出现一次。
问题是动画显示太快 - 从右侧到结束位置的 50 像素没有变换。图片/文本 - 当我滚动时,组件子组件会弹出。
这是该组件的代码:
import React, { useEffect, useState } from 'react';
import { Spring, config } from 'react-spring/renderprops';
import VisibilitySensor from 'react-visibility-sensor';
export const FadeInContainer = ({
children
}: any) => {
const [isVisible, setVisibility] = useState(false);
const [entered, setEntered] = useState(false);
const onChange = (visiblity: any) => {
setTimeout(() => {
setVisibility(visiblity);
}, 200);
};
useEffect(() => {
if (isVisible) {
setEntered(true);
}
}, [isVisible]);
const FadeInDirection = () => {
return (
<Spring
delay={500}
config={config.slow}
to={{
opacity: entered ? 1 : 0,
transform: entered ? 'translateY(0)' : 'translateY(50px)'
}}
>
{({ opacity, transform }) => (
<div style={{ opacity, transform }}>{children}</div>
)}
</Spring>
);
};
return (
<VisibilitySensor onChange={onChange}>
<FadeInDirection />
</VisibilitySensor>
);
};
我已经尝试过的: 1、在useEffect中添加setTimeouts,onChange定义同上。 2.尝试为可见性传感器添加scrollDelay,如下所示:
<VisibilitySensor onChange={onChange} scrollDelay={300}>
只滚动一次的解决方案来自这个线程: https://stackoverflow.com/a/58488868
您知道是否可以做一些事情来使仅在滚动时发生一次的动画更加流畅(主要是变换)?
【问题讨论】:
标签: reactjs react-hooks use-effect react-spring