标题:在没有第三方库的情况下使用 React 和 CSS 创建无限徽标滑块

Title: Creating an infinite logo slider using React and CSS without third-party libraries

提问人:Amir Ben Shimol 提问时间:6/19/2023 最后编辑:Amir Ben Shimol 更新时间:6/19/2023 访问量:1000

问:

我正在使用 CSS 在我的 React 应用程序中实现徽标滑块。我希望滑块表现为无限循环,其中幻灯片中的最后一个徽标后跟第一个徽标,并且此模式无限期地持续下去。

目前,我在 TSX 文件中的实现如下所示:

<section className={classes['container']}>
    <div className={classes['logosSlide']}>
        {props.clientsContent?.map((client, i) => (
            <span key={i}>{client.attributes.clientName}</span>
        ))}
    </div>
</section>

您能否指导我仅使用 React 和 CSS 实现这种无限循环功能,而不依赖任何第三方库?

感谢您提供的任何帮助。

CSS ReactJS 打字稿 滑块 Infinity

评论


答:

2赞 Harelk1015 6/19/2023 #1

将 CSS 样式添加到组件中:

import React, { useEffect } from 'react';
import classes from './LogoSlider.module.css';

const LogoSlider = (props) => {
  useEffect(() => {
    const container = document.querySelector(`.${classes.container}`);
    const slide = document.querySelector(`.${classes.logosSlide}`);

    const cloneSlide = slide.cloneNode(true);
    container.appendChild(cloneSlide);
  }, []);

  return (
    <section className={classes.container}>
      <div className={classes.logosSlide}>
        {props.clientsContent?.map((client, i) => (
          <span key={i}>{client.attributes.clientName}</span>
        ))}
      </div>
    </section>
  );
};

export default LogoSlider;

在单独的CSS文件(例如,LogoSlider.module.css)中定义CSS样式:

.container {
  width: 100%;
  overflow: hidden;
}

.logosSlide {
  display: flex;
  animation: slide infinite 20s linear;
}

@keyframes slide {
  0% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(-100%);
  }
}