Refactored ScrollHandler

This commit is contained in:
Cagatay Civici 2020-09-28 13:24:10 +03:00
parent fd188a46bb
commit a80bdc9498
4 changed files with 17 additions and 34 deletions

View file

@ -1,39 +1,31 @@
import DomHandler from './DomHandler';
import UniqueComponentId from './UniqueComponentId';
export default class ConnectedOverlayScrollHandler {
constructor(element, elementId = UniqueComponentId(), listener = () => {}) {
constructor(element, listener = () => {}) {
this.element = element;
this.elementId = elementId;
this.listener = listener;
}
bindScrollListener() {
this.scrollableParents = DomHandler.getScrollableParents(this.element);
this.scrollListeners = {};
for (let i = 0; i < this.scrollableParents.length; i++) {
let parent = this.scrollableParents[i];
let namespace = `${this.elementId}_${i}`;
if (!this.scrollListeners[namespace]) {
this.scrollListeners[namespace] = this.listener;
parent.addEventListener('scroll', this.scrollListeners[namespace]);
}
this.scrollableParents[i].addEventListener('scroll', this.listener);
}
}
unbindScrollListener() {
if (this.scrollableParents) {
for (let i = 0; i < this.scrollableParents.length; i++) {
let parent = this.scrollableParents[i];
let namespace = `${this.elementId}_${i}`;
if (this.scrollListeners[namespace]) {
parent.removeEventListener('scroll', this.scrollListeners[namespace]);
this.scrollListeners[namespace] = null;
}
this.scrollableParents[i].removeEventListener('scroll', this.listener);
}
}
}
destroy() {
this.unbindScrollListener();
this.element = null;
this.listener = null;
this.scrollableParents = null;
}
}