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;
}
}