diff --git a/src/media/js/mod_mokojoomhero.js b/src/media/js/mod_mokojoomhero.js index d374628..43ed745 100644 --- a/src/media/js/mod_mokojoomhero.js +++ b/src/media/js/mod_mokojoomhero.js @@ -20,6 +20,7 @@ document.addEventListener('DOMContentLoaded', function () { return; } + // ── Image slideshow ── document.querySelectorAll('.mokojoomhero[data-slides]').forEach(function (hero) { var slides = hero.querySelectorAll('.mokojoomhero__slide'); var interval = parseInt(hero.dataset.interval, 10) || 5000; @@ -39,4 +40,49 @@ document.addEventListener('DOMContentLoaded', function () { slides[current].setAttribute('aria-hidden', 'false'); }, interval); }); + + // ── Pause/resume videos when out of viewport ── + if (!('IntersectionObserver' in window)) { + return; + } + + var observer = new IntersectionObserver(function (entries) { + entries.forEach(function (entry) { + var hero = entry.target; + var video = hero.querySelector('video.mokojoomhero__video'); + var iframe = hero.querySelector('iframe.mokojoomhero__video'); + + if (entry.isIntersecting) { + // Resume + if (video) { + video.play(); + } + if (iframe) { + var src = iframe.src || ''; + if (src.indexOf('youtube') !== -1) { + iframe.contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}', '*'); + } else if (src.indexOf('vimeo') !== -1) { + iframe.contentWindow.postMessage('{"method":"play"}', '*'); + } + } + } else { + // Pause + if (video) { + video.pause(); + } + if (iframe) { + var src = iframe.src || ''; + if (src.indexOf('youtube') !== -1) { + iframe.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}', '*'); + } else if (src.indexOf('vimeo') !== -1) { + iframe.contentWindow.postMessage('{"method":"pause"}', '*'); + } + } + } + }); + }, { threshold: 0.1 }); + + document.querySelectorAll('.mokojoomhero').forEach(function (hero) { + observer.observe(hero); + }); }); diff --git a/src/tmpl/default.php b/src/tmpl/default.php index 62879d4..2d8d3fa 100644 --- a/src/tmpl/default.php +++ b/src/tmpl/default.php @@ -45,7 +45,7 @@ $heightAttr = htmlspecialchars($heroHeight, ENT_QUOTES, 'UTF-8'); > - +