This was a hard nut to crack:
I wanted to start a video playing when the parent container was scrolled into view. It appeared that this only works consistently for muted video's.
Example HTML:
<div class="video-container"> <iframe id="player" width="560" height="315" src="https://www.youtube.com/embed/1XPdPKKRFaE?enablejsapi=1&mute=1" title="DCT introduction video" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen ></iframe> </div> So the crux is here: mute=1.
Accompanying JS:
let player; // Will be automatically called when https://www.youtube.com/iframe_api is loaded function onYouTubeIframeAPIReady() { player = new YT.Player("player", { events: { onReady: onPlayerReady, }, }); } function onPlayerReady(event) { // Start video play once in view let callback = (entries, observer) => { entries.forEach((entry) => { if (entry.isIntersecting) { player.playVideo(); } else { player.pauseVideo(); } }); }; let observer = new IntersectionObserver(callback, {}); let target = document.querySelector(".video-container"); observer.observe(target); Notes:
- "player" is the ID of the
iframeused in the HTML - class "video-container" is the name of the element on which the intersection observer detects if the video container is visible in the viewport or not
Top comments (1)
Hi how can i add muted to src (if i dont have access to edit the code