首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能延迟淡出的过渡?

是否有可能延迟淡出的过渡?
EN

Stack Overflow用户
提问于 2019-10-30 02:34:36
回答 4查看 2.7K关注 0票数 3

目标:我希望在一段时间过去后(例如: 4000毫秒),会发生淡出的转换。

下面是我的代码片段:

代码语言:javascript
复制
<Fade in timeout={{ enter: 8000 }}>
  <Box display="flex" justifyContent="center">
    <IconButton href="https://soundcloud.com/jyillamusic">
      <Soundcloud />
    </IconButton>
    <IconButton href="https://www.instagram.com/justinyum98/">
      <Instagram />
    </IconButton>
  </Box>
</Fade>

预期结果:对于enter: 8000,我预计转换将在8000毫秒后发生。

实际结果:转换从0毫秒开始,8000毫秒后结束。

是否支持将淡出转换延迟到指定的时间?

(查看褪色API,我认为duration.enteringScreen意味着转换发生前的毫秒数,但我可能弄错了。)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-10-30 02:43:41

淡入不会实现延迟特性,但是您可以使用手动处理过渡状态

在……里面 显示组件;触发输入或退出状态 类型:布尔型 默认:false

在代码中,可以这样做:

代码语言:javascript
复制
<Fade in={this.state.in} timeout={{ enter: 8000 }}>
  <Box display="flex" justifyContent="center">
    <IconButton href="https://soundcloud.com/jyillamusic">
      <Soundcloud />
    </IconButton>
    <IconButton href="https://www.instagram.com/justinyum98/">
      <Instagram />
    </IconButton>
  </Box>
</Fade>

并在显示中运行超时以等待并创建延迟。

代码语言:javascript
复制
this.state = {
    in: false
};

setTimeout(() => {
    setState({ in: true });
}, 8000);
票数 2
EN

Stack Overflow用户

发布于 2021-07-14 12:26:06

在资料用户界面文档的"Components > Transitions > Zoom demo“中,有一些实现它的例子;比触摸状态更优雅一些!

在esence中,您可以将style属性传递给Fade组件并设置延迟(transitionDelay)。在下面的代码中,我们迭代一个结果数组,并使每个单独的元素被显示,并且比以前延迟了100 In。

代码语言:javascript
复制
 {profileItems.map((pi, index) => (
    <Fade in={profileItems.length > 0}
          timeout={{ enter: 500, exit: 250 }}
          style={{ transitionDelay: `${index * 100}ms` }}
          key={`asi-${pi.key}-${index}`}>
       <span>
         <DisplayItem profileItem={pi} />
       </span>
   </Fade>))}
票数 6
EN

Stack Overflow用户

发布于 2022-02-02 19:29:24

为了摆脱塞巴斯蒂恩巴比尔,您可以创建一个自定义转换组件,它只需传递一个delay支柱就可以为您处理状态。

下面是组件的样子(我添加了其他有用的道具):

代码语言:javascript
复制
const MyFade = ({
   children,
   in: In = true,
   timeout = 1000,
   delay = 0
}) => {
   const [isIn, setIsIn] = useState(In && delay === 0)

   useEffect(() => {
      if (delay > 0) {
         setTimeout(() => setIsIn(true), delay)
      }
   })

   return (
      <Fade in={isIn} timeout={timeout}>
         {children}
      </Fade>
   )
}

然后让你的具体问题等待4000毫秒:

代码语言:javascript
复制
<MyFade in timeout={{ enter: 8000 }} delay={4000}>
  <Box display="flex" justifyContent="center">
    <IconButton href="https://soundcloud.com/jyillamusic">
      <Soundcloud />
    </IconButton>
    <IconButton href="https://www.instagram.com/justinyum98/">
      <Instagram />
    </IconButton>
  </Box>
</MyFade>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58617976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档