diff options
| author | Eltrac <hi@guhub.cn> | 2025-06-02 12:44:37 +0800 |
|---|---|---|
| committer | Eltrac <hi@guhub.cn> | 2025-06-02 12:44:37 +0800 |
| commit | 7d16aff90a25e744544834a42776368b55903ea6 (patch) | |
| tree | b1ebbc1c4b5aeb193038dd08f56a6db9bf518ce0 /layouts/partials/scripts.html | |
| parent | 35ca346761620ad43c663ac04335bdce52d81e7d (diff) | |
perf: load aPlayer after the whole page
Diffstat (limited to 'layouts/partials/scripts.html')
| -rw-r--r-- | layouts/partials/scripts.html | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/layouts/partials/scripts.html b/layouts/partials/scripts.html index 308038ff..12beca10 100644 --- a/layouts/partials/scripts.html +++ b/layouts/partials/scripts.html @@ -8,6 +8,57 @@ <script>Fancybox.bind("[data-fancybox]");</script> {{- end }} +{{ if .Params.aplayer }} +<script> +document.addEventListener("DOMContentLoaded", function () { + const lazyPlayers = document.querySelectorAll(".lazy-aplayer"); + if (!lazyPlayers.length) return; + + const loadAPlayer = () => { + if (window.APlayer) return Promise.resolve(); + return new Promise((resolve, reject) => { + const script = document.createElement('script'); + script.src = "https://unpkg.com/aplayer@1.10.1/dist/APlayer.min.js"; + script.onload = resolve; + script.onerror = reject; + document.body.appendChild(script); + }); + }; + + const observer = new IntersectionObserver((entries, obs) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + loadAPlayer().then(() => { + const el = entry.target; + const id = el.dataset.id ? `-` + el.dataset.id : ``; + const container = document.createElement('div'); + container.id = `aplayer${id}`; + el.appendChild(container); + + const ap = new APlayer({ + container: container, + audio: [{ + name: el.dataset.name, + artist: el.dataset.artist, + url: el.dataset.url, + cover: el.dataset.cover + }] + }); + + ap.on('play', () => umami?.track?.('🎵 Play music with aPlayer')); + ap.on('ended', () => umami?.track?.('🎵 Played entiresong with aPlayer')); + + obs.unobserve(el); + }); + } + }); + }); + + lazyPlayers.forEach(player => observer.observe(player)); +}); +</script> +{{ end }} + <script> littlefoot.littlefoot({ dismissOnUnhover: true, |
