Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.06.2020, 23:55
Интересующийся
Отправить личное сообщение для Domik942 Посмотреть профиль Найти все сообщения от Domik942
 
Регистрация: 29.12.2019
Сообщений: 19

Перехватить выход из полноэкранного режима
Подскажите пожалуйста как перехватить выход из полноэкранного режима ?

Я хотел бы вывести console.log на это событие.

Нашёл на форуме статью где 6 лет назад ТС задавался подобным вопросом, но в этой ветке нет работающего кода.

https://javascript.ru/forum/misc/475...atiya-esc.html
Ответить с цитированием
  #2 (permalink)  
Старый 12.06.2020, 01:47
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

https://www.w3schools.com/jsref/tryi...llscreenchange
https://stackoverflow.com/questions/...ullscreen-mode

Последний раз редактировалось Nexus, 12.06.2020 в 01:57.
Ответить с цитированием
  #3 (permalink)  
Старый 24.06.2020, 13:51
Интересующийся
Отправить личное сообщение для Domik942 Посмотреть профиль Найти все сообщения от Domik942
 
Регистрация: 29.12.2019
Сообщений: 19

Почему-то у меня не совсем получается поймать выход из полноэкранного режима.

Написал следующий код, но он работает только в Firefox, в Chrome не работает.

Подскажите пожалуйста как мне поймать выход.


function isFullScreen(){
    return window.screenTop == 0 ? true : false;
}

document.addEventListener("fullscreenchange", function() {

    if(! isFullScreen()) {
        alert ("Exit 1");
    }
});

document.addEventListener("mozfullscreenchange", function() {

    if(! isFullScreen()) {
        alert ("Exit 2");
    }
});

document.addEventListener("webkitfullscreenchange", function() {
    if(! isFullScreen()) {
        alert ("Exit 3");
    }
});

document.addEventListener("msfullscreenchange", function() {
    if(! isFullScreen()) {
        alert ("Exit 4");
    }

});
Ответить с цитированием
  #4 (permalink)  
Старый 24.06.2020, 15:12
Интересующийся
Отправить личное сообщение для Domik942 Посмотреть профиль Найти все сообщения от Domik942
 
Регистрация: 29.12.2019
Сообщений: 19

Разбрался, спасибо за ссылки.
Ответить с цитированием
  #5 (permalink)  
Старый 25.06.2020, 22:16
Интересующийся
Отправить личное сообщение для Domik942 Посмотреть профиль Найти все сообщения от Domik942
 
Регистрация: 29.12.2019
Сообщений: 19

Всё же не разобрался.

Почему-то не получается перехватить выход из полноэкранного режима во всех браузерах корректно.

Подскажите пожалуйста как распознать что именно после нажатия ESC пользователь выходит из полноэкранного режима ?

document.addEventListener("fullscreenchange", function() {

        if( (screen.availHeight || screen.height-30) >= window.innerHeight ) {

            alert("exit 1");
        }


    });

    document.addEventListener("mozfullscreenchange", function() {

        if( (screen.availHeight || screen.height-30) >= window.innerHeight ) {

            alert("exit 2");
        }

    });

    document.addEventListener("webkitfullscreenchange", function() {

        if( (screen.availHeight || screen.height-30) >= window.innerHeight ) {

            alert("exit 3");
        }

    });

    document.addEventListener("msfullscreenchange", function() {

        if( (screen.availHeight || screen.height-30) >= window.innerHeight ) {

            alert("exit 4");
        }

    });
Ответить с цитированием
  #6 (permalink)  
Старый 26.06.2020, 00:26
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Никак, наверное. При выходе из fullscreen'а событие клавиатуры не передается документу.

Я себе такой стенд накидал:
Fullscreen mode: 
<button onclick="openFullscreen();">On</button>
<button onclick="closeFullscreen();">Off</button>
<div>
    <pre id="log" style="max-height: 300px"></pre>
</div>

<script>
    const elem = document.documentElement;

    /* Function to open fullscreen mode */
    function openFullscreen() {
      if (elem.requestFullscreen) {
        elem.requestFullscreen();
      } else if (elem.mozRequestFullScreen) { /* Firefox */
        elem.mozRequestFullScreen();
      } else if (elem.webkitRequestFullscreen) { /* Chrome, Safari & Opera */
        elem.webkitRequestFullscreen();
      } else if (elem.msRequestFullscreen) { /* IE/Edge */
        elem = window.top.document.body; //To break out of frame in IE
        elem.msRequestFullscreen();
      }
    }

    /* Function to close fullscreen mode */
    function closeFullscreen() {
      if (document.exitFullscreen) {
        document.exitFullscreen();
      } else if (document.mozCancelFullScreen) {
        document.mozCancelFullScreen();
      } else if (document.webkitExitFullscreen) {
        document.webkitExitFullscreen();
      } else if (document.msExitFullscreen) {
        window.top.document.msExitFullscreen();
      }
    }
    
    const isFullscreenMode = () => Math.abs(window.innerHeight - screen.height) < 10;

    const devtoolsIsOpen = (() => {
        const devtools = function () { this.opened = false; };
        devtools.toString = function () { this.opened = true; };

        return () => {
            console.log('%c', devtools);
            
            return devtools.opened;
        };
    })();
    
    const log = (() => {
        const log = document.querySelector('#log');
        
        return message => {
            let lines = log.textContent.split('\n');
            lines = lines.slice(Math.max(0, lines.length - 5));
            
            lines.push(message);
            
            log.textContent = lines.join('\n');
        }
    })();
</script>

<script>
let lastEscapeKeydownTime = 0;
const ESC_KEYCODE = 27

const events = [
    'fullscreenchange',
    'mozfullscreenchange',
    'webkitfullscreenchange',
    'msfullscreenchange',
];

events.forEach(function (eventName) {
    document.addEventListener(eventName, function () {
        const isFSMode = isFullscreenMode();
        log('FSMode: ' + (isFullscreenMode() ? 'on' : 'off'));
        
        if (!isFSMode && (new Date() - lastEscapeKeydownTime) / 1000 < 50) {
            log('This is a reaction to the click of a Escape button.');
        }
    });
});

['keydown', 'keypress', 'keyup'].forEach(eventName => {
    document.addEventListener(eventName, function (e) {
        if (e.code !== 'Escape' && e.keyCode !== ESC_KEYCODE) {
            return;
        }
        
        lastEscapeKeydownTime = +new Date();
        log('escape');
    });
});

</script>
Ответить с цитированием
  #7 (permalink)  
Старый 27.08.2020, 23:11
Интересующийся
Отправить личное сообщение для Domik942 Посмотреть профиль Найти все сообщения от Domik942
 
Регистрация: 29.12.2019
Сообщений: 19

Извиняюсь за столь позднюю реакцию на ваше сообщение. Сейчас вернулся к этому вопросу, и похоже что скрипт не работает, если например у пользователя открыт инспектор или консоль (Firefox).

В этом случае статус всегда FSMode: off, что при открытии полноэкранного режима, что при закрытии.

Сообщение от Nexus Посмотреть сообщение
Никак, наверное. При выходе из fullscreen'а событие клавиатуры не передается документу.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выход из полноэкранного режима, при проигрывании видео TheSanches Общие вопросы Javascript 9 22.06.2019 13:37
Из полноэкранного режима произведён выход, так как в фокусе был windowed-плагин waropank Firefox/Mozilla 0 13.10.2016 00:33
Как перехватить WMI-событие Igogobus Events/DOM/Window 0 09.10.2014 17:48