81 lines
2.7 KiB
TypeScript
81 lines
2.7 KiB
TypeScript
function addOverlay(overlay: HTMLElement) {
|
|
// const overlay = document.getElementById('overlay');
|
|
overlay.style.opacity = "1"; // Затемнено
|
|
overlay.style.display = "inherit"; //
|
|
}
|
|
function removeOverlay(overlay: HTMLElement) {
|
|
overlay.style.opacity = "0"; // Вернуть в исходное состояние
|
|
overlay.style.display = "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) {
|
|
overlay.style.display = "none";
|
|
|
|
// Проверка состояния и выполнение нужного действия
|
|
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);
|
|
});
|
|
}
|