From 3b5144f475d9a933d4ec6dac98f4ed98e53697b4 Mon Sep 17 00:00:00 2001 From: Kibi Kelburton Date: Sat, 23 May 2026 09:40:58 +0200 Subject: [PATCH] hide controls after 5 seconds and remove unnecesarry min-height --- public/s/css/v0ck.css | 1 - public/s/js/v0ck.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/public/s/css/v0ck.css b/public/s/css/v0ck.css index 2a8b955..3c28d4d 100644 --- a/public/s/css/v0ck.css +++ b/public/s/css/v0ck.css @@ -8,7 +8,6 @@ background-position: center center; touch-action: none; /* Prevent pull-to-refresh and scroll while interacting */ z-index: 0; - min-height: 400px; } .v0ck video { diff --git a/public/s/js/v0ck.js b/public/s/js/v0ck.js index 2e9c97c..dd167d6 100644 --- a/public/s/js/v0ck.js +++ b/public/s/js/v0ck.js @@ -541,6 +541,34 @@ class v0ck { else toggleDanmakuSwitch.addEventListener('click', handleDanmakuToggle); } } + + // Mobile controls auto-hide logic (auto hide controls after 5 seconds of inactivity) + let controlsTimer; + function resetControlsTimer() { + if (!isMobile) return; + clearTimeout(controlsTimer); + if (!video.paused) { + controlsTimer = setTimeout(() => { + player.classList.remove('v0ck_hover'); + if (settingsMenu && !settingsMenu.classList.contains('v0ck_hidden')) { + settingsMenu.classList.add('v0ck_hidden'); + document.dispatchEvent(new CustomEvent('v0ck_settings_closed')); + } + }, 5000); + } + } + + if (isMobile) { + // Use capturing phase so we intercept events before child elements stop propagation + const resetEvents = ['touchstart', 'touchmove', 'touchend', 'click']; + resetEvents.forEach(evt => { + player.addEventListener(evt, resetControlsTimer, { capture: true, passive: true }); + }); + video.addEventListener('play', resetControlsTimer); + video.addEventListener('playing', resetControlsTimer); + video.addEventListener('pause', () => clearTimeout(controlsTimer)); + } + this.toggleFullScreen = toggleFullScreen; this.enterFullScreen = enterFullScreen;