Changeset 4c9f29a in Klonkt for src/assets/js
- Timestamp:
- 06/15/2026 03:23:14 AM (3 months ago)
- Branches:
- main
- Children:
- 3e86f1c
- Parents:
- 650b601
- git-author:
- roboburr <roboburr@…> (06/15/2026 03:22:47 AM)
- git-committer:
- roboburr <roboburr@…> (06/15/2026 03:23:14 AM)
- Location:
- src/assets/js
- Files:
-
- 1 added
- 1 edited
-
audio-player.js (modified) (4 diffs)
-
embed-player.js (added)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/js/audio-player.js
r650b601 r4c9f29a 386 386 function close() { 387 387 pause(); 388 mediaRegistry().release(registrySelf); 388 389 root.classList.add('audio-player-hidden'); 389 390 document.body.classList.remove('has-audio-player'); … … 425 426 426 427 // ============================================================ 428 // 4b. Mutual exclusion — gedeelde media-registry (zie embed-player.js). 429 // ============================================================ 430 // Alle spelers (deze site-speler + de YouTube/SoundCloud/Spotify-embeds) 431 // registreren zich in window.pcmsMediaRegistry. Start er één, dan pauzeert de 432 // vorige. Dit is de precieze vervanger van de oude focus/blur-heuristiek voor 433 // de embeds met een echte JS-API. (De blur-fallback hieronder blijft staan 434 // voor iframe-only embeds zonder API: Bandcamp/Apple Music/Vimeo.) 435 function mediaRegistry() { 436 if (window.pcmsMediaRegistry) return window.pcmsMediaRegistry; 437 const r = { 438 _active: null, 439 setActive(player) { 440 if (this._active && this._active !== player && this._active.pause) { 441 try { this._active.pause(); } catch (e) {} 442 } 443 this._active = player; 444 }, 445 release(player) { if (this._active === player) this._active = null; }, 446 }; 447 window.pcmsMediaRegistry = r; 448 return r; 449 } 450 const registrySelf = { pause() { try { audio.pause(); } catch (e) {} } }; 451 452 // ============================================================ 427 453 // 5. Audio element events → UI sync 428 454 // ============================================================ … … 434 460 root.classList.add('is-playing'); 435 461 root.classList.remove('audio-needs-tap'); // verstop tap-hint 462 mediaRegistry().setActive(registrySelf); // pauzeer eventueel spelende embeds 436 463 }); 437 464 // Reset de error-teller pas bij ECHTE playback-start (`playing`), niet bij … … 547 574 }); 548 575 549 // Geen dubbel geluid: élke embed (YouTube/Vimeo/SoundCloud/Spotify/Apple Music/ 550 // Bandcamp) is een iframe. Zodra de gebruiker er een aanklikt om af te spelen, 551 // gaat de focus naar dat iframe -> window 'blur'. Speelt onze speler dan? 552 // Pauzeer 'm. (Op de site zijn iframes per definitie embeds.) 576 // Vangnet voor mutual exclusion. Voor YouTube/SoundCloud/Spotify-embeds doet de 577 // registry dit al precies (echte play-events). Maar voor iframe-only embeds 578 // ZONDER JS-API (Bandcamp/Apple/Vimeo) én voor de iframe-FALLBACK (als een 579 // ad-blocker de player-API blokkeert) is er geen play-event: daar vangen we het 580 // af via focus. Klikt de gebruiker zo'n iframe aan → window 'blur' → pauzeer 581 // onze speler. (Voor de API-embeds is dit hooguit een onschadelijke dubbele 582 // pauze.) 553 583 window.addEventListener('blur', () => { 554 584 setTimeout(() => { 555 585 const el = document.activeElement; 556 if (el && el.tagName === 'IFRAME' && audio.src && !audio.paused) { 586 // Alleen embed-iframes (binnen .folio-embed) pauzeren de speler — niet een 587 // willekeurig iframe (captcha/reclame/kaart) dat per ongeluk focus krijgt. 588 if (el && el.tagName === 'IFRAME' && el.closest('.folio-embed') && audio.src && !audio.paused) { 557 589 pause(); 558 590 }
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)