2016-08-16 4 views
2

Я создаю приложение (ES6), и мне любопытно, что такое «правильный» способ уловить прокрутку вверх/вниз событий?React-listen для прокрутки вверх/вниз?

Я попробовал (npm) установку response-scroll-listener, но я не мог заставить его работать с моим классом ES6.

В основном я хочу: если прокручивать вверх, сделайте это; если прокрутите вниз, сделайте что-нибудь еще.

import React from 'react'; 
import config from '../config'; 
import StaticImageList from '../Common/StaticImageList'; 
import ScrollListener from 'react-scroll-listener'; 

class Album extends React.Component { 
    constructor(props){ 
     super(props); 

    } 
    myScrollStartHandler(){ 
     console.log('Scroll start'); 

    } 
    myScrollEndHandler(){ 
     console.log('Scroll end 300ms(default)'); 
    } 
    componentDidMount(){ 
     scrollListener.addScrollHandler('body', myScrollStartHandler, myScrollEndHandler); 
    } 
    render(){ 
     return <StaticImageList />; 
    } 
}; 

export default Album; 

ответ

2

Это общий совет для подключения в любых слушателей:

Закрепить материал в componentDidMount, Unattach в componentWillUnmount

class Whatever extends Component { 
    componentDidMount() { 
    window.addEventListener('scroll', this.handleScroll) 
    } 

    componentWillUnmount() { 
    window.removeEventListener('scroll', this.handleScroll) 
    } 

    handleScroll(event) { 
    // do something like call `this.setState` 
    // access window.scrollY etc 
    }) 
} 
+0

Спасибо! Отлично. Какой лучший кросс-браузерный способ отличить прокрутку вверх от прокрутки вниз? –

+0

просто запишите значение scrollY и посмотрите, меньше или меньше следующего – azium

+2

Как вы можете поймать событие колеса на элементе с переполнением скрытым? (т. е. ничего не прокручивать, но все же хотите использовать событие колеса в качестве триггера). –