响应:在水平滚动后将 className="active" 添加到列表项 (css: overflow-x: scroll;)

React: add className="active" to list item after horizontal scroll (css: overflow-x: scroll;)

我希望根据我在 React 中的 Slider 上的水平滚动行为更新列表项上的类名。关于如何解决这个问题的任何建议?到目前为止我找不到解决方案。

目前,一张图片填满了 window 的整个宽度,滚动后可以看到下一个项目。但我也想让这个开关在 ul 列表项中可见。基本上,滚动后,我希望列表项 1 中的 className 变为 "inactive",第二个列表项 className 变为 "active",依此类推。

基本上主要组件是这样的:

import React, { Component } from 'react';
import Slider from './Slider';

export default class Property extends Component {

  constructor(props) {
    super(props);
    this.state = {
      object: [
        {
          title: "...",
          description: "...",
          img: "...",
        },
        {
          ...}
      ]
    };
  }

  render() {
    return (
      <div id="property">
        <div className="detailsWrapper">
          <h2>Lodge Highlights</h2>
          <Slider object={this.state.object}/>
          <ul>
            <li className="is-active"></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
          </ul>
        </div>
      </div>
    )
  }
}

我的滑块组件如下所示:

import React, { Component } from 'react';

export default class Slider extends Component {

  render() {
    return (
      <div className="higlights_slider">
        {this.props.object.map((eachObject, index) => {
          return (
            <div className="highlights_slider_content" key={eachObject.id} value={eachObject.id}>
              <img src={eachObject.img} alt=""/>
              <h3>{eachObject.title}</h3>
              <h4>{eachObject.description}</h4>   
            </div>
            )
           })}
        </div>
    )
  }
}

在我的 css(或 scss)中,我使用 .highlights_slider overflow-x: scroll

感谢任何帮助!提前致谢!!

有很多方法可以做到这一点,但我建议对每张幻灯片使用 intersection observer https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API(最佳方法)。

如果您在实施观察者方面需要帮助,请告诉我。

你只需要一个class。每当滑块超过阈值时,观察者都会通知您,因此您可以从当前索引 - 1 处的幻灯片中删除 class 并在当前幻灯片上添加 class。

你只需要一个 class。 每当滑块超过阈值时,观察者都会通知您,因此您可以从当前索引 - 1 处的幻灯片中删除 class 并在当前幻灯片上添加 class。