@profitlich/template-toolkit 2.18.6 → 2.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
import '@mux/mux-player';
|
|
2
2
|
import './mux-player.scss';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Lädt Mux-Videos lazy und steuert Autoplay per IntersectionObserver.
|
|
6
|
+
*
|
|
7
|
+
* Ladereihenfolge:
|
|
8
|
+
* 1. observeLazyElements() beobachtet alle .mux-player-Container.
|
|
9
|
+
* 2. Betritt ein Container den Viewport, ersetzt #handleLazyLoad ihn durch
|
|
10
|
+
* ein <mux-player>-Element und ruft handleVisibilityChange auf.
|
|
11
|
+
* 3. handleVisibilityChange → #setup für alle sichtbaren Videos:
|
|
12
|
+
* - Autoplay: muted, Controls versteckt, #playPauseObserver startet
|
|
13
|
+
* - Kein Autoplay: keine Änderungen, User steuert Wiedergabe selbst
|
|
14
|
+
* - display:none beim Laden: Setup wird übersprungen; Projekt ruft
|
|
15
|
+
* handleVisibilityChange erneut auf, sobald das Video sichtbar wird.
|
|
16
|
+
* 4. onPlayerCreated (optional): wird für alle Player aufgerufen, unabhängig
|
|
17
|
+
* von Autoplay und nach dem internen Setup.
|
|
18
|
+
*
|
|
19
|
+
* Pausierlogik:
|
|
20
|
+
* - Viewport verlassen → #handlePlayPause via IntersectionObserver (nur Autoplay)
|
|
21
|
+
* - display:none gesetzt → handleVisibilityChange (manuell vom Projekt aufzurufen)
|
|
22
|
+
*/
|
|
4
23
|
export class MuxPlayer {
|
|
5
24
|
#lazyLoadObserver;
|
|
6
25
|
#playPauseObserver;
|
|
@@ -28,6 +47,7 @@ export class MuxPlayer {
|
|
|
28
47
|
return;
|
|
29
48
|
}
|
|
30
49
|
|
|
50
|
+
const autoplay = player.dataset.autoplay === 'true';
|
|
31
51
|
if (autoplay) player.muted = true;
|
|
32
52
|
if (autoplay) player.style.setProperty('--controls', 'none');
|
|
33
53
|
if (this.#loop) player.loop = true;
|
|
@@ -35,16 +55,19 @@ export class MuxPlayer {
|
|
|
35
55
|
// Flag setzen, um zukünftige Ausführungen zu verhindern.
|
|
36
56
|
player.dataset.isSetup = 'true';
|
|
37
57
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
this.#playPauseObserver.observe(player);
|
|
41
|
-
} else {
|
|
42
|
-
player.addEventListener('loadeddata', () => {
|
|
58
|
+
if (autoplay) {
|
|
59
|
+
if (player.readyState >= 2) { // HAVE_CURRENT_DATA oder höher
|
|
43
60
|
this.#playPauseObserver.observe(player);
|
|
44
|
-
}
|
|
61
|
+
} else {
|
|
62
|
+
player.addEventListener('loadeddata', () => {
|
|
63
|
+
this.#playPauseObserver.observe(player);
|
|
64
|
+
}, { once: true });
|
|
65
|
+
}
|
|
45
66
|
}
|
|
46
67
|
}
|
|
47
68
|
|
|
69
|
+
// Für Videos, die ein-/ausgeblendet werden
|
|
70
|
+
// zum Beispiel Startseite Angebote
|
|
48
71
|
handleVisibilityChange(player) {
|
|
49
72
|
const isVisible = window.getComputedStyle(player).display !== 'none';
|
|
50
73
|
|
|
@@ -99,13 +122,16 @@ export class MuxPlayer {
|
|
|
99
122
|
|
|
100
123
|
if (autoplay) {
|
|
101
124
|
player.setAttribute('data-autoplay', 'true');
|
|
125
|
+
} else {
|
|
126
|
+
player.setAttribute('data-autoplay', 'false');
|
|
102
127
|
}
|
|
103
128
|
|
|
104
|
-
const
|
|
129
|
+
const setStatus = value => player.setAttribute('data-status', value);
|
|
105
130
|
|
|
106
|
-
player.addEventListener('
|
|
107
|
-
player.addEventListener('
|
|
108
|
-
player.addEventListener('
|
|
131
|
+
player.addEventListener('loadstart', () => setStatus('loadstart'));
|
|
132
|
+
player.addEventListener('playing', () => setStatus('playing'));
|
|
133
|
+
player.addEventListener('pause', () => setStatus('pause'));
|
|
134
|
+
player.addEventListener('ended', () => setStatus('ended'));
|
|
109
135
|
|
|
110
136
|
console.log(
|
|
111
137
|
'Toolkit Video',
|
|
@@ -115,17 +141,17 @@ export class MuxPlayer {
|
|
|
115
141
|
);
|
|
116
142
|
|
|
117
143
|
container.replaceWith(player);
|
|
118
|
-
|
|
144
|
+
setStatus('false');
|
|
119
145
|
|
|
146
|
+
this.handleVisibilityChange(player);
|
|
120
147
|
if (this.#onPlayerCreated) {
|
|
121
148
|
this.#onPlayerCreated(player, container);
|
|
122
|
-
} else if (autoplay) {
|
|
123
|
-
this.handleVisibilityChange(player);
|
|
124
149
|
}
|
|
125
150
|
}
|
|
126
151
|
}
|
|
127
152
|
}
|
|
128
153
|
|
|
154
|
+
// Für autoplay Videos: play und pause
|
|
129
155
|
#handlePlayPause(entries) {
|
|
130
156
|
for (const entry of entries) {
|
|
131
157
|
const player = entry.target;
|
package/package.json
CHANGED