标题: 使用React和CSS创建一个无限循环的标志滑块,无需第三方库

huangapple go评论59阅读模式
英文:

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

问题

我正在努力在我的React应用程序中使用CSS实现一个徽标滑块。我希望滑块的行为像一个无限循环,滑块中的最后一个徽标后面跟着第一个徽标,这个模式无限重复。

目前,我的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实现这种无限循环功能?

我感激您能提供的任何帮助。

英文:

I'm working on implementing a logo slider in my React application using CSS. I want the slider to behave as an infinite loop, where the last logo in the slide is followed by the first logo, and this pattern continues indefinitely.

Currently, my implementation in the TSX file looks like this:

&lt;section className={classes[&#39;container&#39;]}&gt;
	&lt;div className={classes[&#39;logosSlide&#39;]}&gt;
		{props.clientsContent?.map((client, i) =&gt; (
			&lt;span key={i}&gt;{client.attributes.clientName}&lt;/span&gt;
		))}
	&lt;/div&gt;
&lt;/section&gt;

Could you please guide me on achieving this infinite loop functionality using only React and CSS, without relying on any third-party libraries?

I appreciate any assistance you can provide.

答案1

得分: 2

向您的组件添加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文件中定义CSS样式(例如,LogoSlider.module.css):

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

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

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

Add CSS styles to your component:

import React, { useEffect } from &#39;react&#39;;
import classes from &#39;./LogoSlider.module.css&#39;;

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

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

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

export default LogoSlider;

Define CSS styles in a separate CSS file (e.g., LogoSlider.module.css):

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

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

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

huangapple
  • 本文由 发表于 2023年6月19日 02:06:25
  • 转载请务必保留本文链接:https://go.coder-hub.com/76501927.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定