Перехватить выход из полноэкранного режима
Подскажите пожалуйста как перехватить выход из полноэкранного режима ?
Я хотел бы вывести console.log на это событие. Нашёл на форуме статью где 6 лет назад ТС задавался подобным вопросом, но в этой ветке нет работающего кода. https://javascript.ru/forum/misc/475...atiya-esc.html |
|
Почему-то у меня не совсем получается поймать выход из полноэкранного режима.
Написал следующий код, но он работает только в 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"); } }); |
Разбрался, спасибо за ссылки.
|
Всё же не разобрался.
Почему-то не получается перехватить выход из полноэкранного режима во всех браузерах корректно. Подскажите пожалуйста как распознать что именно после нажатия 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"); } }); |
Никак, наверное. При выходе из 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> |
Извиняюсь за столь позднюю реакцию на ваше сообщение. Сейчас вернулся к этому вопросу, и похоже что скрипт не работает, если например у пользователя открыт инспектор или консоль (Firefox).
В этом случае статус всегда FSMode: off, что при открытии полноэкранного режима, что при закрытии. Цитата:
|
Часовой пояс GMT +3, время: 19:47. |