<script> const onDOMContentLoaded = () => { window.isMuted = true; const onVideoPlaying = (event) => { const { target: vidElement } = event; try { updateAudioBtnVisibility(hasAudio(vidElement)); } catch (_) {} } function bgMediaPause() { setTimeout(() => { document .querySelectorAll(".swiper-slide:not(.swiper-slide-active) .vidbg-container video, .swiper-slide:not(.swiper-slide-active) audio") .forEach((mediaElement) => { if (mediaElement.id.startsWith('audio-player')) { return; } try { mediaElement.pause(); mediaElement.removeEventListener('playing', onVideoPlaying); mediaElement.removeEventListener('ended', onMediaElementEnded); } catch (_) {} }); const activeSlide = document.querySelector(".swiper-slide-active"); let activeSlideHasAudio = false; let activeSlideHasVideo = false; let videoReadyToLoop = false; let audioReadyToLoop = false; function onMediaElementEnded(event) { let videoElement = activeSlide.querySelector(".vidbg-container video"); let audioElement = activeSlide.querySelector("audio"); let videoSourceElement = videoElement ? videoElement.querySelector("source") : null; let videoSrc = videoSourceElement ? videoSourceElement.getAttribute('src') : null; // Only consider the videoElement valid if the src attribute is not "#" if (videoSrc === "#") { videoElement = null; } if (event.target.tagName.toLowerCase() === 'video') { videoReadyToLoop = true; } else { audioReadyToLoop = true; } if (videoElement && audioElement && videoReadyToLoop && audioReadyToLoop) { videoElement.currentTime = 0; videoElement.play(); audioElement.currentTime = 0; audioElement.play(); videoReadyToLoop = false; audioReadyToLoop = false; } else if (!videoElement && audioElement && audioReadyToLoop) { audioElement.currentTime = 0; audioElement.play(); audioReadyToLoop = false; audioElement.loop = true; // add this line } else if (videoElement && !audioElement && videoReadyToLoop) { videoElement.currentTime = 0; videoElement.play(); videoReadyToLoop = false; videoElement.loop = true; // add this line } } activeSlide .querySelectorAll(".vidbg-container video, audio") .forEach((mediaElement) => { const videoElement = activeSlide.querySelector(".vidbg-container video"); mediaElement.currentTime = 0; mediaElement.muted = isMuted; if (mediaElement.tagName.toLowerCase() === 'video') { activeSlideHasVideo = true; if (hasAudio(mediaElement)) { mediaElement.volume = 0.5; } else { mediaElement.volume = 1.0; } } if (mediaElement.tagName.toLowerCase() === 'audio') { activeSlideHasAudio = true; mediaElement.volume = 1.0; } mediaElement.play().catch((error) => { console.log('Media play interrupted:', error); }); mediaElement.addEventListener('ended', onMediaElementEnded); mediaElement.addEventListener('playing', onVideoPlaying); }); updateAudioBtnVisibility(activeSlideHasAudio); }, 200); } function hasAudio(mediaElement) { if(mediaElement.tagName === 'AUDIO') { return true; } return ( mediaElement.mozHasAudio || Boolean(mediaElement.webkitAudioDecodedByteCount) || Boolean(mediaElement.audioTracks && mediaElement.audioTracks.length) ); } window.updateAudioBtnIcon = function() { if (isMuted) { volumeToggleButton.innerHTML = '<i class="fas fa-volume-mute"></i>'; } else { volumeToggleButton.innerHTML = '<i class="fas fa-volume-up"></i>'; } } function updateAudioBtnVisibility(visible) { volumeToggleButton.style.visibility = visible ? "visible" : "hidden"; } const sliders = document.querySelector(".swiper-container"); const volumeToggleButton = document.getElementById("volume-toggle"); sliders.zbSwiper.on("slideChange", bgMediaPause); updateAudioBtnIcon(); // Function to mute all media elements function muteAllMedia() { document.querySelectorAll(".vidbg-container video, audio").forEach(mediaElement => { if (!mediaElement.id.startsWith("audio-player")) { mediaElement.muted = true; } }); } volumeToggleButton.addEventListener("click", function () { isMuted = !isMuted; const activeSlide = document.querySelector(".swiper-slide-active"); let activeSlideHasAudio = false; activeSlide.querySelectorAll(".vidbg-container video, audio") .forEach((mediaElement) => { if (!mediaElement.id.startsWith("audio-player")) { mediaElement.muted = isMuted; if (hasAudio(mediaElement)) { activeSlideHasAudio = true; } } }); updateAudioBtnVisibility(activeSlideHasAudio); updateAudioBtnIcon(); }); // Event listener for the #sendgift button const sendGiftButton = document.getElementById("sendgift"); if (sendGiftButton) { sendGiftButton.addEventListener("click", function () { isMuted = true; updateAudioBtnIcon(); muteAllMedia(); }); } // Event listener for the #send-modal button const sendModalButton = document.getElementById("send-modal"); if (sendModalButton) { sendModalButton.addEventListener("click", function () { isMuted = true; updateAudioBtnIcon(); muteAllMedia(); }); } bgMediaPause(); } document.addEventListener("DOMContentLoaded", onDOMContentLoaded); </script>
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter