#javascript #google-chrome #firefox #webgl #dom-events
#javascript #google-chrome #firefox #webgl #dom-события
Вопрос:
Происходит ли какое-либо событие JavaScript, когда пользователь включает полноэкранный режим в Chrome или FireFox?
У меня есть приложение WebGL с шириной и высотой холста, установленными на определенный размер, и я хотел бы изменить его размер, среди прочего, когда пользователь включает полноэкранный режим. Если такого события нет, должен ли я начать изучать способы заполнения окна браузера canvas, хотя это усложняет процесс отладки?
Ответ №1:
Вы можете сравнить ширину экрана с шириной или высотой браузера.
if (screen.width == window.innerWidth amp;amp; screen.height == window.innerHeight) {
//full web browser
}
РЕДАКТИРОВАТЬ: Будьте осторожны в Chrome, если у пользователя есть менеджер загрузок, панель перевода или элемент inspercter открыты, высота отличается от экрана.
Комментарии:
1. Это сработало бы, но потребовало бы постоянной проверки изменений в некоторой интервальной функции, что было бы менее предпочтительно по сравнению с обработкой событий.
2. Я создал этот скрипт для просмотра размеров мобильного устройства.
onresize
событие проверки, проверьтеonload
сначала. frommelt.fr/dimension.html3. Но будьте осторожны в Chrome, если у пользователя есть менеджер загрузок, панель перевода или элемент inspercter открыты, высота отличается от экрана.
Ответ №2:
Вы можете использовать document.mozFullScreen и document.webkitIsFullScreen как показано ниже:
if ((!document.mozFullScreen amp;amp; !document.webkitIsFullScreen)) {
//FullScreen is disabled
} else {
//FullScreen is enabled
}
Комментарии:
1. Я получаю false для этого, когда я на самом деле нахожусь в полноэкранном режиме. Chrome в OS X.
2. @tremby вы включили полноэкранный режим с помощью браузера или вы использовали javascript requestFullscreen api? Потому что этот флаг предназначен только для определения того, перешел ли элемент в полноэкранный режим, а не само окно
3. Возможно, так оно и было. Но я понятия не имею, над чем я работал два года назад, поэтому не могу сказать.
Ответ №3:
Я провел тест в разных браузерах (IE9, Chrome, FireFox, Opera amp; Safari), эта функция работает.
function chkfullscreen() {
if (window.navigator.standalone || (document.fullScreenElement amp;amp; document.fullScreenElement != =null) || (document.mozFullScreen || document.webkitIsFullScreen) || (!window.screenTop amp;amp; !window.screenY))
// full screen
alert('full screen');
}
Комментарии:
1. if (!window.screenTop amp;amp; !window.screenY) в некоторых случаях не работает (например, если окно браузера не имеет границ и пользователь развернул окно максимально). Помимо тестирования в нескольких браузерах, вам необходимо протестировать на нескольких операционных системах и оконных менеджерах.
2. спасибо, что указали на ситуацию. я бы посоветовал попробовать этот полноэкранный тестовый сайт pearce.org.nz/fullscreen
Ответ №4:
Я создаю новое событие, которое срабатывает, когда браузер переходит на полноэкранный режим и обратно (через F11 или HTML5 Fullscreen API).
(function(){
var ok = true;
window.addEventListener('resize', function()
{
setTimeout(function ()
{
if (ok)
{
ok = false;
setTimeout(function () { ok = true; }, 170);
sendEvent(window.outerWidth === screen.width amp;amp; window.outerHeight === screen.height);
}
}, 30);
}, false);
function sendEvent(fullscreen)
{
var event = new CustomEvent('fullscreenchange', { detail: fullscreen, bubbles: true, cancelable: true });
if (document.fullscreenElement)
document.fullscreenElement.dispatchEvent(event);
else
document.dispatchEvent(event);
}
})();
Использование с JavaScript
document.addEventListener('fullscreenchange', fullscreenChanged, false);
function fullscreenChanged(event)
{
console.log('Fullscreen: ' event.detail);
}
или jQuery
$(document).on('fullscreenchange', function()
{
console.log('Fullscreen: ' event.detail);
});
Ответ №5:
В 2019 году, через восемь лет после того, как был задан вопрос, MDN рекомендует использовать fscreen, поскольку браузеры по-прежнему не поддерживают fullscreen API согласованным образом.
Чтобы определить, перешел ли браузер на полноэкранный режим, прослушайте событие fullscreenshange
:
fscreen.addEventListener('fullscreenchange', handler, options);
Чтобы получить элемент, который в данный момент находится в полноэкранном режиме, используйте fscreen.fullscreenElement
.
Демонстрация fscreen показывает, что полноэкранное состояние может быть обнаружено.
Ответ №6:
После долгих поисков и разочарований это лучший метод, который я нашел:
function isFullScreen() {
// do stuff for full screen
}
function notFullScreen() {
// do stuff for non-full screen
}
document.addEventListener("fullscreenchange", function () {
(document.fullscreen) ? isFullScreen() : notFullScreen();
}, false);
document.addEventListener("mozfullscreenchange", function () {
(document.mozFullScreen) ? isFullScreen() : notFullScreen();
}, false);
document.addEventListener("webkitfullscreenchange", function () {
(document.webkitIsFullScreen) ? isFullScreen() : notFullScreen();
}, false);
Или если вы предпочитаете не использовать тернарный оператор:
function isFullScreen() {
// do stuff for full screen
}
function notFullScreen() {
// do stuff for non-full screen
}
document.addEventListener("fullscreenchange", function () {
if (document.fullscreen) {
isFullScreen();
} else {
notFullScreen();
}
}, false);
document.addEventListener("mozfullscreenchange", function () {
if (document.mozFullScreen) {
isFullScreen();
} else {
notFullScreen();
}
}, false);
document.addEventListener("webkitfullscreenchange", function () {
if (document.webkitIsFullScreen) {
isFullScreen();
} else {
notFullScreen();
}
}, false);
Комментарии:
1. Работает ли это, если пользователь переходит в полноэкранный режим, а затем загружает страницу впоследствии? Или они перезагружают текущую страницу?
2. @skibulk не уверен, в моем случае перезагрузка страницы автоматически выводит меня из полноэкранного режима, но я применял это к видеоплееру.