javascript - react 无限幻灯片

标签 javascript reactjs slideshow setinterval

我正在尝试在 React 中创建无限幻灯片。有很多包可以帮助开发人员创建幻灯片,但我想自己做。

这是我试过的代码:

    changeImage() {
    this.props.adverts.advertImages.map((img,i) => {
    setInterval(() => {
      this.setState({bg: img.imgSrc})
    }, 3000*(i+1));
    });
  }

我在返回 div 时这样调用它 {this.changeImage()}

在元素上我有 style={{backgroundImage: "url("+this.state.bg+")"}}

一开始很慢,过一会儿就变快了..

最佳答案

你做错了。发生的事情是你的循环运行并创建了一个 x setInterval 的实例(基于数组的长度),因此你有一个 array.length 数量的 setIntervals 正在运行,这是不好的。

你要做的是:

您想在经过一定时间(3 秒)后显示图像

    let index = 0;
    setInterval(() => {
      this.setState({
        bg: this.props.adverts.advertImages[index++].imgSrc
      })
      if (index === this.props.adverts.advertImages.length) index = 0;
    }, 3000);

如果你想添加额外的逻辑,比如在每次滴答后增加计时器间隔(使动画变慢),那么你可以将索引添加到 3000

这里的主要问题是 OP 在渲染内部调用函数,而不是在渲染时调用它

componentDidMount(){
 let index = 0;
    setInterval(() => {
      this.setState({
        bg: this.props.adverts.advertImages[index++].imgSrc
      })
      if (index === this.props.adverts.advertImages.length) index = 0
    }, 3000);
}

  render() {
    return (<div>
      <Advertisement 
      style={{ backgroundImage: "url("+this.state.bg+")" }} centered unit='billboard' test='Billboard' />
    </div>);
  }
}

关于javascript - react 无限幻灯片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50190643/

相关文章:

javascript - 随机图像 slider (JS)

javascript - 防止 Scala 不必要地转义 XML 中的双引号

javascript - 使用变量在 jQuery 中设置 css 属性值

javascript - 我应该如何重构这段代码以防止函数在定义之前被使用

reactjs - ReactJS 组件中的恒定放置

django - 如何从对 django 的前端响应中捕获错误和异常数据以添加更多上下文

javascript - Swiper slider 鼠标滚动和循环内容

jquery - 使用 jQuery 同时更改图像和文本 css 属性

php - 来自 php 变量的 Google Analytics 自定义变量(动态数字)

css - 导航栏折叠按钮不显示 bootstrap 4.5.0 和 Nextjs 9.4.4 的元素