仅当元素在屏幕上时如何播放动画

Posted

技术标签:

【中文标题】仅当元素在屏幕上时如何播放动画【英文标题】:How to play animation only when the element is on screen 【发布时间】:2021-01-03 16:44:06 【问题描述】:

我正在使用 React,我需要知道元素何时在屏幕上播放淡入淡出动画,并使其出现在屏幕上。因为动画总是在页面加载时播放,但是如果您必须滚动才能看到元素,那么您将永远看不到动画:(

<Grid container className="AnimationContainer">
  <img src="/images/animation1/circle.svg" className="Animation1-1" />
  <img src="/images/animation1/calculator.svg" className="Animation1-2" />
</Grid>

在我的 CSS 文件中,我有:

.AnimationContainer 
  place-content: center;
  height: 200px;
  width: 100%;

.Animation1-1 
  animation: fading 2s;

.Animation1-2 
  animation: fading 1.2s;

@keyframes fading
  0%opacity:0
  100%opacity:1

只有在 Grid "AnimationContainer" 或 img "Animation1-1"/"Animation1-2" 可见时,我可以在此处执行什么操作?

【问题讨论】:

【参考方案1】:

使用Intersection Observer 来检测元素何时可见,并且仅在可见时设置animation 属性。使用react-intersection-observer 很容易做到这一点:

import  useInView  from "react-intersection-observer"

const Example => () => 
  const [ref, inView] = useInView( threshold: 0.5 )

  return (
    <Grid ref=ref container className="AnimationContainer">
      <img src="/images/animation1/circle.svg" className=inView ? "Animation1-1" : null />
      <img src="/images/animation1/calculator.svg" className=inView ? "Animation1-2" : null />
    </Grid>
  )

【讨论】:

您忘记在 Grid(或 img)标签上添加“ref=ref”,但谢谢!它解决了问题! @Octaviotastico 哎呀,你是对的。为后代修复它。 :)

以上是关于仅当元素在屏幕上时如何播放动画的主要内容,如果未能解决你的问题,请参考以下文章

将 Flash 层放置在元素上时保留 CSS 动画

如何检查 HTML 元素的动画?

将鼠标悬停在css上时如何暂停幻灯片自动播放?

仅在屏幕场景和一个又一个元素中键入动画(jQuery)

如何在颤动的屏幕开始处添加动画显示

CSS效果实现与源码