oTree Forum >

How to Autoplay Embedded YouTube Videos with Sound and Disable Pause Option

#1 by WD95

Hi everyone,

I'm embedding a YouTube video on a page and want to achieve the following:

The video should autoplay with sound when participants enter the page.
Participants should not be able to pause the video.
I'm currently facing the following issue: due to browser restrictions, if the video has sound, the autoplay=1 command doesn't execute, and the video doesn't autoplay. However, if I set mute=1, the video autoplays, but it remains muted since the control buttons are hidden.

Is there any way to achieve both autoplay with sound? Can we unmute the video after a few seconds of playback?

Here is my current code:
<script>
        // Array of video sources with autoplay parameter for YouTube embed
        const videoSources = [
       {% for video in videos_to_play %}
           "{% video %}",
       {% endfor %}
   ];

        // Function to create draggable video popup
        function createVideoPopup(videoSrc) {
            // Create a popup element for the video
            let popup = document.createElement('div');
            popup.className = 'video-popup';
            popup.style.left = `760px`; // Random initial left position
            popup.style.top = `300px`; // Random initial top position

            // Use an iframe to embed the YouTube video
            popup.innerHTML = `
                <iframe width="560" height="315" src="${videoSrc}&autoplay=1&controls=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
            `;

            // Make popup draggable
            makeDraggable(popup);

            // Add popup to video-container
            document.getElementById('video-container').appendChild(popup);
        }

        // Function to make an element draggable
        function makeDraggable(element) {
            let offsetX = 0, offsetY = 0;

            element.addEventListener('mousedown', startDragging);

            function startDragging(event) {
                event.preventDefault();
                offsetX = event.clientX - element.getBoundingClientRect().left;
                offsetY = event.clientY - element.getBoundingClientRect().top;
                document.addEventListener('mousemove', drag);
                document.addEventListener('mouseup', stopDragging);
            }

            function drag(event) {
                let x = event.clientX - offsetX;
                let y = event.clientY - offsetY;
                element.style.left = x + 'px';
                element.style.top = y + 'px';
            }

            function stopDragging() {
                document.removeEventListener('mousemove', drag);
                document.removeEventListener('mouseup', stopDragging);
            }
        }

        // Function to show random video popup
        function showRandomVideoPopup() {
            let randomIndex = Math.floor(Math.random() * videoSources.length);
            createVideoPopup(videoSources[randomIndex]);
        }

        // Call showRandomVideoPopup when the page loads
        window.addEventListener('load', function() {
            showRandomVideoPopup();
        });
    </script>
    
    
Thank you very much for your help!

Write a reply

Set forum username