Add separate zoom wrapper layers for all video modes

- Added live-video-wrapper around webcam-player
- Added timelapse-wrapper inside timelapse-viewer
- Added daily-video-wrapper inside daily-video-player
- Zoom now applies to wrapper divs, not video elements directly
- Pan works by dragging inside video container when zoomed
- Double-click to reset zoom
- Cursor changes to grab when zoomed > 1x
- Touch support for mobile pan
This commit is contained in:
Claude
2026-01-15 14:09:42 +00:00
parent 2e6fd332ac
commit f9b84e4d3c
2 changed files with 129 additions and 98 deletions
+38 -15
View File
@@ -152,16 +152,18 @@ class WebcamManager {
// Zeigt NUR das Video ohne Schnickschnack
public function displayWebcam() {
return '
<video id="webcam-player"
autoplay
muted
playsinline
webkit-playsinline
x-webkit-airplay="allow"
x5-video-player-type="h5"
x5-video-player-fullscreen="true"
style="width: 100%; height: 100%; object-fit: contain;">
</video>';
<div id="live-video-wrapper" class="video-zoom-wrapper">
<video id="webcam-player"
autoplay
muted
playsinline
webkit-playsinline
x-webkit-airplay="allow"
x5-video-player-type="h5"
x5-video-player-fullscreen="true"
style="width: 100%; height: 100%; object-fit: contain;">
</video>
</div>';
}
// Das ist die neue Anzeige für unten links
@@ -1495,13 +1497,30 @@ nav ul li a:hover { color: #4CAF50; }
z-index: 30;
}
#webcam-player, #timelapse-viewer, #daily-video-player {
#live-video-wrapper, #timelapse-viewer, #daily-video-player {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 8px;
overflow: hidden;
}
.video-zoom-wrapper {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
transition: transform 0.2s ease;
transform-origin: center center;
}
#webcam-player, #timelapse-image, #daily-video {
width: 100%;
height: 100%;
object-fit: contain;
}
.video-info-bar {
@@ -2044,15 +2063,19 @@ body.theme-neo footer {
<!-- Timelapse Overlay -->
<div id="timelapse-viewer" style="display: none;">
<img id="timelapse-image" src="" alt="Timelapse Image" style="width: 100%; height: 100%; object-fit: cover;">
<div id="timelapse-wrapper" class="video-zoom-wrapper">
<img id="timelapse-image" src="" alt="Timelapse Image" style="width: 100%; height: 100%; object-fit: cover;">
</div>
<div id="timelapse-time-overlay"></div>
</div>
<!-- Daily Video Player (für Tagesvideos) -->
<div id="daily-video-player" style="display: none;">
<video id="daily-video" controls playsinline style="width: 100%; height: 100%; object-fit: contain;">
<source src="" type="video/mp4">
</video>
<div id="daily-video-wrapper" class="video-zoom-wrapper">
<video id="daily-video" controls playsinline style="width: 100%; height: 100%; object-fit: contain;">
<source src="" type="video/mp4">
</video>
</div>
</div>
</div>