Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React-带幻灯片之间转换的转盘,React弹簧_Javascript_Reactjs_Typescript_React Spring - Fatal编程技术网

Javascript React-带幻灯片之间转换的转盘,React弹簧

Javascript React-带幻灯片之间转换的转盘,React弹簧,javascript,reactjs,typescript,react-spring,Javascript,Reactjs,Typescript,React Spring,我目前制作了一个旋转木马组件,我正在将数据传递给它,但我想在切换数据之间添加一个转换 我听过很多人推荐react spring,所以我想试试。我目前正在尝试实现useTransitionhook,但它没有按预期工作 我只想在用户按下“左”/“右”按钮时淡入/淡出数据。目前它开始淡出我的内容,但随后创建了我的旋转木马的克隆,并且不会淡出。。。我不确定我做错了什么,或者这是否是我应该使用的正确钩子 最终,我更喜欢内容淡出时的交错动画 在每个元素之间有一些延迟。例如:标题,然后价格,然后 描述等将淡入

我目前制作了一个旋转木马组件,我正在将数据传递给它,但我想在切换数据之间添加一个转换

我听过很多人推荐react spring,所以我想试试。我目前正在尝试实现
useTransition
hook,但它没有按预期工作

我只想在用户按下“左”/“右”按钮时淡入/淡出数据。目前它开始淡出我的内容,但随后创建了我的旋转木马的克隆,并且不会淡出。。。我不确定我做错了什么,或者这是否是我应该使用的正确钩子

最终,我更喜欢内容淡出时的交错动画 在每个元素之间有一些延迟。例如:标题,然后价格,然后 描述等将淡入,但每种描述之间有300毫秒的延迟 元素

以下是我目前拥有的:

const mod = (n: any, m: any) => ((n % m) + m) % m;

const CarouselContainer: React.FC = () => {
  const [index, setIndex] = useState(0);

  const handlePrev = useCallback(() => {
    setIndex(state => mod(state - 1, data.length));
  }, [setIndex]);

  const handleNext = useCallback(() => {
    setIndex(state => mod(state + 1, data.length));
  }, [setIndex]);

  const transitions = useTransition([index], (item: number) => item, {
    from: { opacity: 0 },
    enter: { opacity: 1 },
    leave: { opacity: 0 }
  });

  return (
    <>
      {transitions.map(({ item, props, key }) => (
        <Carousel
          prevClick={handlePrev}
          icon={data[item].icon}
          title={data[item].title}
          price={data[item].price}
          description={data[item].description}
          href={data[item].href}
          nextClick={handleNext}
          style={props}
          key={key}
        />
      ))}
    </>
  );
};
const mod=(n:any,m:any)=>((n%m)+m)%m;
const CarouselContainer:React.FC=()=>{
const[index,setIndex]=useState(0);
const handlePrev=useCallback(()=>{
setIndex(state=>mod(state-1,data.length));
},[setIndex]);
常量handleNext=useCallback(()=>{
setIndex(state=>mod(state+1,data.length));
},[setIndex]);
常量转换=使用转换([索引],(项目:编号)=>项目{
发件人:{opacity:0},
输入:{opacity:1},
左:{不透明度:0}
});
返回(
{transitions.map({item,props,key})=>(
))}
);
};

有相当多的代码,所以我提供了一个,forks很受欢迎!:)

当装载和卸载在转换过程中发生时,新元素和旧元素会同时出现在dom中。由于这个原因,大多数时候我使用绝对定位和转换。这样,变化很好地融合在一起

为此,您必须在此处更改为
位置:绝对

const StyledWrapper = styled.div`
  position: absolute;
  display: grid;
  grid-template-columns: auto auto 20% 20% 1fr auto auto;
  grid-template-rows: 3em 1fr auto 1fr 3em;
  grid-gap: 0;
`;
我会尝试添加一些动作:

  const transitions = useTransition([index], (item: number) => item, {
    from: { opacity: 0, transform: 'translateX(-420px)' },
    enter: { opacity: 1, transform: 'translateX(0px)' },
    leave: { opacity: 0, transform: 'translateX(420px)' }
  });
这是您修改过的代码:


接下来,您需要根据按下的按钮来处理移动的方向。这里有一个例子:

是否有一种方法可以仅仅转换内容而不是整个旋转木马?而且,它没有完全淡出内容,然后又重新进入?我尝试添加一个duration
config:{duration:1000}
,但它在淡出完成之前会淡入?您可以将动画放到任何您想要的div中。如果你愿意,可以放在旋转木马里。我在页面上添加了一些移动,这样你就可以更好地了解正在发生的事情。我更新了我的答案。嗨,乔丹。你解决了这个问题吗?我和你有同样的问题。它开始淡入淡出,然后在没有平滑过渡的情况下完成淡入淡出。