diff --git a/src/index.d.ts b/src/index.d.ts index ae9dccc..48544fe 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -4,8 +4,10 @@ declare const intersect: { declare const Observer: { start(): void, + restart(): void, observe(): void, - getThreshold(element: HTMLElement): number, + _getThreshold(element: HTMLElement): number, + _observers: IntersectionObserver[], } export default intersect diff --git a/src/observer/index.js b/src/observer/index.js index 64724d9..cf27bb2 100644 --- a/src/observer/index.js +++ b/src/observer/index.js @@ -9,6 +9,13 @@ const Observer = { this.observe() }, + restart() { + this._observers.forEach(observer => observer.disconnect()) + this._observers = [] + + this.observe() + }, + observe() { const selectors = [ '[class*=" intersect:"]', @@ -34,14 +41,16 @@ const Observer = { element.classList.contains('intersect-once') && observer.disconnect() }) }, { - threshold: this.getThreshold(element), + threshold: this._getThreshold(element), }) observer.observe(element) + + this._observers.push(observer) }) }, - getThreshold(element) { + _getThreshold(element) { if (element.classList.contains('intersect-full')) { return 0.99 } @@ -52,6 +61,8 @@ const Observer = { return 0 }, + + _observers: [], } export default Observer