#1 by WD95
Hi, I would like to ask for assistance with a question I have with the viewing of videos in Otree. I want to add the following feature to the slider page where I'm currently embedding a pop-up window to play videos, but I'm not sure how to modify the code. How can I change my code if I have a lot of different types of films and I let people choose the type of movie they want to watch first, then play the video based on their preference? {{ block title }} {{ endblock }} {{ block content }} <p>Rounds: {{ round_number }}/{{ C.NUM_ROUNDS }} Right: {{ player.correct_rounds }}</p> <table class="table table-striped"> <tr> <th><p>Target1: {{ player.target_value_1 }}</p><input type="range" name="slider1" min="-1" max="100" oninput="updateDescription1(this)" value="-1" list="values"> <output id="description1" style="text-align:center ; font-size: 15px"></output></th> <th><p>Target2: {{ player.target_value_2 }}</p><input type="range" name="slider2" min="-1" max="100" oninput="updateDescription2(this)" value="-1" list="values"> <output id="description2" style="text-align:center ; font-size: 15px"></output></th> <th><p>Target3: {{ player.target_value_3 }}</p><input type="range" name="slider3" min="-1" max="100" oninput="updateDescription3(this)" value="-1" list="values"> <output id="description3" style="text-align:center ; font-size: 15px"></output></th> <th><p>Target4: {{ player.target_value_4 }}</p><input type="range" name="slider4" min="-1" max="100" oninput="updateDescription4(this)" value="-1" list="values"> <output id="description4" style="text-align:center ; font-size: 15px"></output></th> </tr> </table> <datalist id="values"> <option value="0" label="0">0</option> <option value="50" label="50">50</option> <option value="100" label="100">100</option> </datalist> <!-- Container for draggable video popups --> <div id="video-container"></div> <script> // Array of video sources const videoSources = [ '{% static 'example/video1.mp4' %}', '{% static 'example/video2.mp4' %}', '{% static 'example/video3.mp4' %}' // Add more video sources as needed ]; // 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 = `${Math.random() * (window.innerWidth - 300)}px`; // Random initial left position popup.style.top = `${Math.random() * (window.innerHeight - 200)}px`; // Random initial top position popup.innerHTML = ` <video controls autoplay loop muted> <source src="${videoSrc}" type="video/mp4"> Your browser does not support the video tag. </video> `; // Make popup draggable makeDraggable(popup); // Remove the stop button from controls popup.querySelector('video').setAttribute('controlsList', 'nodownload'); // 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> <style> /* CSS styles for the video popup */ .video-popup { position: absolute; z-index: 1000; /* Ensure it's on top of other content */ background: rgba(0, 0, 0, 0.8); /* Semi-transparent black background */ padding: 20px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); cursor: move; /* Change cursor to indicate draggability */ } .video-popup video { width: 20%; height: 20%; } .video-popup video::-webkit-media-controls { display: none !important; /* Hide all controls including the stop button */ } </style> <script> let description1 = document.getElementById('description1'); function updateDescription1(input) { let slider1 = parseInt(input.value); description1.innerText = `${slider1}` } let description2 = document.getElementById('description2'); function updateDescription2(input) { let slider2 = parseInt(input.value); description2.innerText = `${slider2}` } let description3 = document.getElementById('description3'); function updateDescription3(input) { let slider3 = parseInt(input.value); description3.innerText = `${slider3}` } let description4 = document.getElementById('description4'); function updateDescription4(input) { let slider4 = parseInt(input.value); description4.innerText = `${slider4}` } </script> {{ next_button }} {{ endblock }}