【问题标题】:Why animation works only for the first slide and not for the others?为什么动画只适用于第一张幻灯片而不适用于其他幻灯片?
【发布时间】:2021-03-28 04:08:27
【问题描述】:

我正在尝试使用反应钩子制作一个带有淡入淡出动画的简单幻灯片。但我的动画仅适用于第一张幻灯片,不适用于其他幻灯片。

这是功能代码:

import React, { useEffect, useRef, useState } from "react";
import './Homepage.css';

const Homepage = () => { 

  const slides = [
    "../../backgroundImages/1a.jpg",
    "../../backgroundImages/1b.jpg",
    "../../backgroundImages/1.jpg"
  ]; 
  
  const playRef = useRef<any>(null);

  const [slideIndex, setSlideIndex] = useState<number>(0);

  useEffect(() => {
    playRef.current = nextSlide;    
  }); 

  useEffect(() => {
    const play = setInterval(() => {      
      playRef.current();      
    }, 3000);
    
    return () => {
      clearInterval(play);
    }    
  }, []);  

  const nextSlide = () => {    
    slideIndex >= slides.length -1 
      ? setSlideIndex(0) 
      : setSlideIndex((slideIndex) => slideIndex + 1);
  }  

  return(       
    <img alt='background' src={slides[slideIndex]}
          className='homepage-background-div'
    />
  );
}
export default Homepage;

这是css:

.homepage-background-div {
  position: absolute;  
  top: 0;
  height: 100vh;
  width: 100vw;   
  z-index: -1;
  animation: fadein 2s;
}  
@keyframes fadein {
  from { opacity: 0; }
  to   { opacity: 1; }
}

我在 stackoverflow 以及许多其他文章和教程上对类似问题有红色答案,但无法解决问题。任何帮助都将受到欢迎。

【问题讨论】:

    标签: css reactjs animation


    【解决方案1】:

    key={slides[slideIndex]}添加到标签img

    <img
      alt="background"
      key={slides[slideIndex]}
      src={slides[slideIndex]}
      className="homepage-background-div"
    />
    

    【讨论】:

    • 就是这样。谢谢。如果问得不算多,能不能给个简短的解释?
    • 动画在组件被渲染时触发一次。当您更改图片时,标签保持不变,因此动画不会开始。而当“key”被添加时,当图像发生变化时,新组件被挂载,动画开始。
    猜你喜欢
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    相关资源
    最近更新 更多