Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

React.js Call function after scroll event

I have built a React component which is suppose to call the function on window scroll event.

I would like to call the function, "getCards('default'), when the user scroll to 90% of the scroll height.

The component looks as shown in below:

class Home extends React.Component {

  constructor(props) {
    super(props);
    this.handleScroll = this.handleScroll.bind(this);
  }

  componentDidMount() {
    // test
    this.props.getCards('default');
    window.addEventListener('scroll', this.handleScroll);
  }

  handleScroll(event) {
    console.log('scroll event');
  }

Could anyone help me achieve this?

Thank you.

like image 653
Eunicorn Avatar asked Nov 16 '25 20:11

Eunicorn


2 Answers

You have to work with your component, please refer to this code:

class Home extends React.Component {

  constructor(props) {
    super(props);
  }

  componentDidMount() {
    // test
    this.props.getCards('default');
  }

  render() {
    return (<div onScroll={this.handleScroll}>...</div>)
  }

  handleScroll(event) {
    var heightBound = window.height * 0.8
    if (heightBound > window.scrollY) {
        // Probably you want to load new cards?
        this.props.getCards(...);
    } 
  }

The scroll event must be placed inside your component and binded using onScroll evt. The handler will check for percentage of used screen size and will load others elements if the lower bound limit is reached.

I hope this can help :)

like image 99
Roberto Conte Rosito Avatar answered Nov 18 '25 09:11

Roberto Conte Rosito


I've got a similar problem and nothing with onScroll work to me.

constructor(props) {
  super(props);
  window.addEventListener('scroll', this.handleScroll, true);
}

handleScroll = (event) =>  { 
  // Your code
}

https://gist.github.com/koistya/934a4e452b61017ad611

like image 38
monteirobrena Avatar answered Nov 18 '25 09:11

monteirobrena



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!