From ef169b5449325abb29aea0a21cb5b913f409a1d1 Mon Sep 17 00:00:00 2001 From: freakinu Date: Sun, 2 Mar 2025 08:12:55 +0200 Subject: [PATCH 1/2] added a restart function to the Observer object --- src/index.d.ts | 1 + src/observer/index.js | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/index.d.ts b/src/index.d.ts index ae9dccc..70873f7 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -4,6 +4,7 @@ declare const intersect: { declare const Observer: { start(): void, + restart(): void, observe(): void, getThreshold(element: HTMLElement): number, } diff --git a/src/observer/index.js b/src/observer/index.js index 64724d9..c448cb5 100644 --- a/src/observer/index.js +++ b/src/observer/index.js @@ -9,7 +9,12 @@ const Observer = { this.observe() }, - observe() { + restart() { + this.observe(true) + this.observe() + }, + + observe(unobserve = false) { const selectors = [ '[class*=" intersect:"]', '[class*=":intersect:"]', @@ -23,6 +28,12 @@ const Observer = { document.querySelectorAll(selectors.join(',')).forEach(element => { const observer = new IntersectionObserver(entries => { entries.forEach(entry => { + + if(unobserve) { + observer.disconnect() + return + } + if (! entry.isIntersecting) { element.setAttribute('no-intersect', '') From 233d026ea684a401db1f7fa72c98f219b45015eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20Heidk=C3=A4mper?= Date: Sun, 16 Mar 2025 12:00:04 +0100 Subject: [PATCH 2/2] small adjustments for observer restart --- src/index.d.ts | 3 ++- src/observer/index.js | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/index.d.ts b/src/index.d.ts index 70873f7..48544fe 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -6,7 +6,8 @@ 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 c448cb5..cf27bb2 100644 --- a/src/observer/index.js +++ b/src/observer/index.js @@ -10,11 +10,13 @@ const Observer = { }, restart() { - this.observe(true) + this._observers.forEach(observer => observer.disconnect()) + this._observers = [] + this.observe() }, - observe(unobserve = false) { + observe() { const selectors = [ '[class*=" intersect:"]', '[class*=":intersect:"]', @@ -28,12 +30,6 @@ const Observer = { document.querySelectorAll(selectors.join(',')).forEach(element => { const observer = new IntersectionObserver(entries => { entries.forEach(entry => { - - if(unobserve) { - observer.disconnect() - return - } - if (! entry.isIntersecting) { element.setAttribute('no-intersect', '') @@ -45,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 } @@ -63,6 +61,8 @@ const Observer = { return 0 }, + + _observers: [], } export default Observer