I am developing a react component which is basically scroll to bottom feed.
I have an issue while loading more data and props are updating, scroll event queues up and executes after the loading is done. I have tried to disable and enable scroll while data is loading as mentioned here
this.keys = {37: 1, 38: 1, 39: 1, 40: 1};
preventDefault(e) {
e = e || window.event;
if (e.preventDefault)
e.preventDefault();
e.returnValue = false;
}
preventDefaultForScrollKeys(e) {
if (this.keys[e.keyCode]) {
this.preventDefault(e);
return false;
}
}
disableScroll() {
if (window.addEventListener) // older FF
window.addEventListener('DOMMouseScroll', this.preventDefault, false);
window.onwheel = this.preventDefault; // modern standard
window.onmousewheel = document.onmousewheel = this.preventDefault; // older browsers, IE
window.ontouchmove = this.preventDefault; // mobile
document.onkeydown = this.preventDefaultForScrollKeys;
}
enableScroll() {
if (window.removeEventListener)
window.removeEventListener('DOMMouseScroll', this.preventDefault, false);
window.onmousewheel = document.onmousewheel = null;
window.onwheel = null;
window.ontouchmove = null;
document.onkeydown = null;
}
ComponentDidRecieveProps(){
this.enableScroll();
}
handleScroll(event){
if((event.target.scrollTop + event.target.clientHeight) >= (event.target.scrollHeight) && event.target.scrollTop > this.lastScrollTop) {
//when hits bottom
this.disableScroll();
this.getMoreData();
}
this.lastScrollTop = event.target.scrollTop
}
render(){
return <div onScroll = {(e) => this.handleScroll(e)}> DATA </div>
}
How to disable scrolling temporarily?
Event though scroll disables but once I enable the scroll back it executes the events queued up, hence scroll even with out user scrolling.
I am using onScroll event of a div, to load more data when it hits bottom.