import React from "react";
import Observer from "react-scroll-observer";
class App extends React.Component {
constructor(props) {
super(props);
this.state = {};
// creating ref to observe this elements
this.box1Ref = React.createRef();
this.box2Ref = React.createRef();
this.box3Ref = React.createRef();
this.box4Ref = React.createRef();
}
componentDidMount() {
const o = new Observer();
// setting observer to first Box
o.observeElement(this.box1Ref.current) // passing the ref to set the observer
.setCallback(this.onBox1View) // callback to be executed on every time the element comes in or out of viewPort
.watch(); // start the observer
// setting observer to second Box
o .observeElement(this.box2Ref.current)
.setCallback(this.onBox2View)
.watch();
// setting observer to third Box
o .observeElement(this.box3Ref.current)
.setCallback(this.onBox3View)
.watch();
// setting observer to fourth Box
o .observeElement(this.box4Ref.current)
.setCallback(this.onBox4View)
.setThreshold(0.5) // set the threshold value upto which position the element comes in or out to execute the callback
.watch();
}
componentWillUnmount (){
// remove all the watchers added to this current instance of Observer
o.removeWatcher();
}
// callback is executed which recieves two values {isVisible, intersectionRatio}
onBox1View = e => {
console.log("Box 1====", e);
};
onBox2View = e => {
console.log("Box 2====", e);
};
onBox3View = e => {
console.log("Box 3====", e);
};
onBox4View = e => {
console.log("Box 4====", e);
};
render() {
return (
<div className="App">
<div ref={this.box1Ref} className="box">
<span>Item 0</span>
</div>
<div ref={this.box2Ref} className="box1">
<span>Item 1</span>
</div>
<div ref={this.box3Ref} className="box2">
<span>Item 2</span>
</div>
<div ref={this.box4Ref} className="box3">
<span>Item 3</span>
</div>
<div className="box3">
<span>Item 4</span>
</div>
<div className="box3">
<span>Item 5</span>
</div>
<div className="box3">
<span>Item 6</span>
</div>
</div>
);
}
}