function addOverlay(overlay: HTMLElement) { // const overlay = document.getElementById('overlay'); overlay.style.opacity = "1"; // Затемнено overlay.style.pointerEvents = "auto"; // Включить клики } function removeOverlay(overlay: HTMLElement) { overlay.style.opacity = "0"; // Вернуть в исходное состояние overlay.style.pointerEvents = "none"; // Игнорировать клики } function addRemoveOverlayTimer(overlay: HTMLElement, time = 1000) { addOverlay(overlay); setTimeout(() => { removeOverlay(overlay); }, time); // 1 секунда затемнения } // Флаги для отслеживания состояния let isMouseInside = true; let isWindowFocused = true; export default function unscreen(overlay: HTMLElement, root: HTMLElement) { let focusTimeout: NodeJS.Timeout | undefined; // Проверка состояния и выполнение нужного действия function checkFocusAndMouse() { if (!isWindowFocused || !isMouseInside) { // ИЛИ addOverlay(overlay); } else if (isWindowFocused && isMouseInside) { // И removeOverlay(overlay); } } // Добавляем обработчики событий window.addEventListener("blur", () => { console.log("blur"); isWindowFocused = false; checkFocusAndMouse(); // Проверяем состояние }); // Когда окно теряет фокус window.addEventListener("focus", () => { console.log("focus"); isWindowFocused = true; checkFocusAndMouse(); // Проверяем состояние }); // Когда окно получает фокус window.addEventListener("mouseleave", () => { console.log("mouseleave"); isMouseInside = false; checkFocusAndMouse(); // Проверяем состояние }); // Когда мышка покидает окно window.addEventListener("mouseenter", () => { console.log("mouseenter"); isMouseInside = true; checkFocusAndMouse(); // Проверяем состояние }); // Когда мышка возвращается в окно root.addEventListener("contextmenu", (event) => event.preventDefault()); window.addEventListener("keydown", function (event) { event.preventDefault(); if (event.key === "PrintScreen" || (event.ctrlKey && event.key === "p")) { addRemoveOverlayTimer(overlay); } }); // Проверка для мобильных устройств root.addEventListener("touchstart", function (event) { // Пример: если есть более чем один жест if (event.touches.length > 1) { addRemoveOverlayTimer(overlay); } }); window.addEventListener("beforeprint", function () { addRemoveOverlayTimer(overlay); }); }