V1
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
/* Lecture MJPEG activée manuellement : libère la caméra si désactivée. */
|
||||
(() => {
|
||||
'use strict';
|
||||
const button = document.getElementById('cameraToggle');
|
||||
const image = document.getElementById('cameraFeed');
|
||||
const placeholder = document.getElementById('cameraPlaceholder');
|
||||
const message = document.getElementById('cameraMessage');
|
||||
const panel = document.querySelector('.camera-panel');
|
||||
let active = false;
|
||||
|
||||
function stop() {
|
||||
active = false;
|
||||
image.removeAttribute('src');
|
||||
image.hidden = true;
|
||||
placeholder.hidden = false;
|
||||
message.textContent = 'Caméra désactivée';
|
||||
button.textContent = 'Activer';
|
||||
button.setAttribute('aria-pressed', 'false');
|
||||
panel.dataset.active = 'false';
|
||||
}
|
||||
function start() {
|
||||
active = true;
|
||||
placeholder.hidden = false;
|
||||
message.textContent = 'Connexion à la caméra…';
|
||||
image.hidden = false;
|
||||
image.src = `/api/camera/stream?t=${Date.now()}`;
|
||||
button.textContent = 'Arrêter';
|
||||
button.setAttribute('aria-pressed', 'true');
|
||||
}
|
||||
button.addEventListener('click', () => active ? stop() : start());
|
||||
image.addEventListener('load', () => { if (active) { placeholder.hidden = true; panel.dataset.active = 'true'; } });
|
||||
image.addEventListener('error', () => {
|
||||
if (!active) return;
|
||||
stop();
|
||||
message.textContent = 'Caméra indisponible ou déjà utilisée';
|
||||
});
|
||||
// Si l'onglet n'est pas visible, relâcher le périphérique USB.
|
||||
document.addEventListener('visibilitychange', () => { if (document.hidden && active) stop(); });
|
||||
window.addEventListener('pagehide', stop);
|
||||
stop();
|
||||
})();
|
||||
Reference in New Issue
Block a user