77 lines
1.5 KiB
JavaScript
77 lines
1.5 KiB
JavaScript
// camera.js
|
|
import { updateResizerVisibility } from './layout.js';
|
|
|
|
let rightPanel;
|
|
let camImage;
|
|
let camClose;
|
|
|
|
let isOpen = false;
|
|
|
|
export function initCamera() {
|
|
rightPanel = document.getElementById("rightPanel");
|
|
camImage = document.getElementById("camImage");
|
|
camClose = document.getElementById("camClose");
|
|
|
|
const btn = document.getElementById("camToggle");
|
|
|
|
const streamUrl = "/api/cam";
|
|
|
|
function open() {
|
|
if (isOpen) return;
|
|
|
|
isOpen = true;
|
|
|
|
rightPanel.classList.remove("hidden");
|
|
|
|
camImage.src = streamUrl;
|
|
|
|
if (btn) {
|
|
btn.querySelector('.cam-btn-text').textContent = 'Скрыть';
|
|
}
|
|
|
|
console.log("[camera] opened");
|
|
|
|
updateResizerVisibility();
|
|
}
|
|
|
|
function close() {
|
|
if (!isOpen) return;
|
|
|
|
isOpen = false;
|
|
|
|
// остановка stream
|
|
camImage.src = "";
|
|
|
|
rightPanel.classList.add("hidden");
|
|
|
|
if (btn) {
|
|
btn.querySelector('.cam-btn-text').textContent = 'Камера';
|
|
}
|
|
|
|
console.log("[camera] closed");
|
|
|
|
updateResizerVisibility();
|
|
}
|
|
|
|
function toggle() {
|
|
if (isOpen) {
|
|
close();
|
|
} else {
|
|
open();
|
|
}
|
|
}
|
|
|
|
camImage.onload = () => {
|
|
console.log("[camera] stream started");
|
|
};
|
|
|
|
camImage.onerror = (e) => {
|
|
console.error("[camera] stream error", e);
|
|
};
|
|
|
|
btn?.addEventListener("click", toggle);
|
|
camClose?.addEventListener("click", close);
|
|
|
|
// автозапуск
|
|
open();
|
|
} |