const video = document.getElementById('video'); const playPauseBtn = document.getElementById('playPause'); const centerPlayBtn = document.getElementById('centerPlayBtn'); const muteBtn = document.getElementById('mute'); const volumeSlider = document.getElementById('volumeSlider'); const fullscreenBtn = document.getElementById('fullscreen'); const playerWrapper = document.querySelector('.player-wrapper'); const controls = document.querySelector('.custom-controls'); // Initialize Lucide icons lucide.createIcons(); updateVolumeIcons(); // Custom Event Logic function togglePlay() { if (video.paused) { video.play(); } else { video.pause(); } } function updatePlayIcons() { const playIconName = video.paused ? 'play' : 'pause'; playPauseBtn.innerHTML = ``; centerPlayBtn.innerHTML = ``; lucide.createIcons(); if (!video.paused) { centerPlayBtn.style.opacity = '0'; centerPlayBtn.style.pointerEvents = 'none'; } else { centerPlayBtn.style.opacity = '1'; centerPlayBtn.style.pointerEvents = 'auto'; } } function toggleMute() { video.muted = !video.muted; updateVolumeIcons(); } function updateVolumeIcons() { let iconName = 'volume-2'; if (video.muted || video.volume === 0) { iconName = 'volume-x'; } else if (video.volume < 0.5) { iconName = 'volume-1'; } muteBtn.innerHTML = ``; lucide.createIcons(); } function toggleFullscreen() { if (!document.fullscreenElement) { playerWrapper.requestFullscreen().catch(err => { console.error(`Error attempting to enable full-screen mode: ${err.message}`); }); } else { document.exitFullscreen(); } } // Event Listeners playPauseBtn.addEventListener('click', togglePlay); centerPlayBtn.addEventListener('click', togglePlay); video.addEventListener('click', togglePlay); video.addEventListener('play', updatePlayIcons); video.addEventListener('pause', updatePlayIcons); muteBtn.addEventListener('click', toggleMute); volumeSlider.addEventListener('input', (e) => { video.volume = e.target.value; video.muted = false; updateVolumeIcons(); }); fullscreenBtn.addEventListener('click', toggleFullscreen); // Hide controls on inactivity let timeout; playerWrapper.addEventListener('mousemove', () => { controls.style.opacity = '1'; controls.classList.add('active'); clearTimeout(timeout); timeout = setTimeout(() => { if (!video.paused) { controls.style.opacity = '0'; controls.classList.remove('active'); } }, 3000); }); // Setup HLS function initHLS(source) { if (Hls.isSupported()) { const hls = new Hls(); hls.loadSource(source); hls.attachMedia(video); hls.on(Hls.Events.MANIFEST_PARSED, function() { // video.play(); }); } else if (video.canPlayType('application/vnd.apple.mpegurl')) { // For native Safari HLS support video.src = source; } }