Video Case Study

VIRTUAL TOUR

Services:

Virtual Tour Videography, 4K Video Production, Cinematic Scripts, Professional Voiceovers, Immersive Experiences

VIRTUAL TOUR

Embark on a journey of discovery as we bring your building to life through our immersive virtual tour videography. Our cinematic and 4K video expertise, coupled with meticulously crafted scripts and professional voiceovers, transforms the traditional tour into an engaging and visually stunning experience. Our team doesn't just capture spaces; we curate an exploration that allows viewers to navigate through the essence of your building. From architectural marvels to intricate details, every frame is a testament to the meticulous planning and execution that defines our virtual tour videography.

Virtual Tour Video Thumbnail
Virtual Tour Banner

Creative Digital, Outdoor, Video Events , TV, and More.

Revamp your advertising strategy today and discover how we can influence your audience. Contact Flash Communications Advertising Agency in Ebene to get started.

const video = document.getElementById('mainVideo'); const playBtn = document.getElementById('playBtn'); const muteBtn = document.getElementById('muteBtn'); const videoContainer = document.querySelector('.video-container'); // Ensure video is muted by default video.muted = true; // Play/Pause button functionality playBtn.addEventListener('click', function (e) { e.preventDefault(); e.stopPropagation(); console.log('Play button clicked, video paused:', video.paused); if (video.paused) { // Try promise-based play first const playPromise = video.play(); if (playPromise !== undefined) { playPromise.then(() => { console.log('Video started playing'); playBtn.innerHTML = ''; playBtn.classList.add('playing'); videoContainer.classList.add('playing'); }).catch(error => { console.error('Video play failed:', error); // Fallback - try direct play try { video.play(); playBtn.innerHTML = ''; playBtn.classList.add('playing'); videoContainer.classList.add('playing'); } catch (e) { console.error('Fallback play also failed:', e); } }); } else { // Direct play for older browsers video.play(); playBtn.innerHTML = ''; playBtn.classList.add('playing'); videoContainer.classList.add('playing'); } } else { console.log('Video paused'); video.pause(); playBtn.innerHTML = ''; playBtn.classList.remove('playing'); videoContainer.classList.remove('playing'); } }); // Mute button functionality muteBtn.addEventListener('click', function (e) { e.preventDefault(); e.stopPropagation(); if (video.muted) { video.muted = false; muteBtn.innerHTML = ''; muteBtn.classList.add('unmuted'); console.log('Video unmuted'); } else { video.muted = true; muteBtn.innerHTML = ''; muteBtn.classList.remove('unmuted'); console.log('Video muted'); } }); // Video event listeners for state synchronization video.addEventListener('play', function () { console.log('Video play event fired'); playBtn.innerHTML = ''; playBtn.classList.add('playing'); videoContainer.classList.add('playing'); }); video.addEventListener('pause', function () { console.log('Video pause event fired'); playBtn.innerHTML = ''; playBtn.classList.remove('playing'); videoContainer.classList.remove('playing'); }); video.addEventListener('ended', function () { console.log('Video ended'); playBtn.innerHTML = ''; playBtn.classList.remove('playing'); videoContainer.classList.remove('playing'); }); // Video container click to play/pause videoContainer.addEventListener('click', function (e) { // Only trigger if clicking on the container or video, not on buttons if (e.target === videoContainer || e.target === video) { e.preventDefault(); console.log('Container clicked, toggling play/pause'); playBtn.click(); } }); // Debug: Log video state console.log('Video element:', video); console.log('Play button:', playBtn); console.log('Mute button:', muteBtn); console.log('Video container:', videoContainer); // Test if elements are found if (!video) console.error('Video element not found!'); if (!playBtn) console.error('Play button not found!'); if (!muteBtn) console.error('Mute button not found!'); if (!videoContainer) console.error('Video container not found!'); // Test mute button clickability muteBtn.style.pointerEvents = 'auto'; muteBtn.style.cursor = 'pointer'; muteBtn.style.zIndex = '10'; // Simple test - add a click handler directly to the button playBtn.onclick = function (e) { console.log('Direct onclick handler fired'); e.preventDefault(); e.stopPropagation(); if (video.paused) { console.log('Attempting to play video...'); video.play(); playBtn.innerHTML = ''; playBtn.classList.add('playing'); videoContainer.classList.add('playing'); } else { console.log('Pausing video...'); video.pause(); playBtn.innerHTML = ''; playBtn.classList.remove('playing'); videoContainer.classList.remove('playing'); } }; // Simple mute button onclick handler muteBtn.onclick = function (e) { console.log('Direct mute onclick handler fired'); e.preventDefault(); e.stopPropagation(); // Visual feedback muteBtn.style.backgroundColor = 'rgba(255, 255, 255, 1)'; setTimeout(() => { muteBtn.style.backgroundColor = 'rgba(255, 255, 255, 0.9)'; }, 200); if (video.muted) { video.muted = false; muteBtn.innerHTML = ''; muteBtn.classList.add('unmuted'); console.log('Video unmuted via onclick'); } else { video.muted = true; muteBtn.innerHTML = ''; muteBtn.classList.remove('unmuted'); console.log('Video muted via onclick'); } }; // Test mute button with mouse events muteBtn.addEventListener('mouseenter', function () { console.log('Mute button hover detected'); }); muteBtn.addEventListener('mousedown', function () { console.log('Mute button mousedown detected'); }); });