Имеет 3 компонента, которые покрывают всю ширину тела и указанную высоту.Мне нужно перейти к предыдущему / следующему компоненту по направлению прокрутки.Я использую событие onWheel, предложенное реагировать, и все хорошо работает с прокруткой и определением направления.Проблема возникает, когда прокручивается вверх / вниз, и появляется неправильный компонент (1-й).
Вот мой код
import React, { Component } from "react";
class App extends Component {
state = {
refObject: {
1: React.createRef(),
2: React.createRef(),
3: React.createRef()
},
lastRefId: 0,
scrollUp: true
};
handleScroll = (event, caller) => {
let directionUp = event.deltaY < 0 ? true : false;
if (caller !== this.state.lastRefId || this.state.scrollUp !== directionUp) {
if (directionUp) {
this.setState({ scrollUp: true });
if (caller > 1) {
window.scrollTo({
top: this.state.refObject[caller - 1],
behavior: "smooth"
});
}
} else {
this.setState({ scrollUp: false });
if (caller < 3) { // since I have 3 components
window.scrollTo({
top: this.state.refObject[caller + 1],
behavior: "smooth"
});
}
}
}
this.setState({ lastRefId: caller, scrollUp: directionUp });
};
render() {
return (
<React.Fragment>
<Component1
key={1}
refProp={this.state.refObject[1]}
onWheel={event => this.handleScroll(event, 1)}
/>
<Component2
key={2}
refProp={this.state.refObject[2]}
onWheel={event => this.handleScroll(event, 2)}
/>
<Component3
key={3}
refProp={this.state.refObject[3]}
onWheel={event => this.handleScroll(event, 3)}
/>
</React.Fragment>
);
}
}
export default App;
Мои компоненты (1-3), как показано ниже:
class Component1 extends Component {
state = {};
render() {
return (
<React.Fragment>
<div
ref={this.props.refProp}
className="d-flex flex-row mt-0 text-center p-3"
onWheel={this.props.onWheel}>
This is a Component
</div>
</React.Fragment>
);
}
}
Например, когда я прокручиваю вниз на второйкомпонент, который покрывает всю ширину тела, он прокручивается до первого компонента.
Оцените ваши подсказки