Как получить значение scrollY при использовании переполнения?

У меня есть следующее приложение React, в котором я использую реагирующую пружину для анимации между маршрутами и анимации различных элементов на основе текущей позиции прокрутки.

Когда я использую overflow: scroll на Home компонент, то я не могу вернуть что-либо из моего handleScroll метод (он просто возвращает 0):

  handleScroll(e) {
    let windowScrollPosition = window.scrollY
    this.setState({ windowScrollPosition: windowScrollPosition }, () => console.log(this.state.windowScrollPosition, 'this.state.windowScrollPosition'))
  }

Это можно обойти?

Мне нужно использовать overflow: scroll чтобы решить эту проблему, к сожалению.

Любая помощь высоко ценится!

1 ответ

Ну, это имело бы смысл. Если вы установите элемент для прокрутки, который имеет высоту 100%, окно никогда не будет прокручивать элемент.

Таким образом, вам нужно получить позицию прокрутки от элемента с elem.scrollTop

Вы можете создать ссылку на элемент в React

constructor(props) {
    super(props);
    this.scrollContainer = React.createRef();
}

return (
    <div className="scroll-container" ref={this.scrollContainer}></div>
)

И тогда в вашем дескрипторе используйте метод прокрутки:

handleScroll(e) {
    let windowScrollPosition = this.scrollContainer.current.scrollTop | window.scrollY;
    this.setState({ windowScrollPosition: windowScrollPosition }, () => console.log(this.state.windowScrollPosition, 'this.state.windowScrollPosition'))
  }
Другие вопросы по тегам