Как подписаться на событие перехода в полноэкранный режим на Yandex Games?
Как подписаться на событие перехода в/из полноэкранного режима на Yandex Games?
Дело в том, что в словесной игре, которую я опубликовал на Yandex Games, я подписан на такое событие и сдвигаю определенные кнопки при переходе в fullscreen:
var domElem = document.getElementById('fullDiv');
domElem.addEventListener('fullscreenchange', moveButtons);
domElem.addEventListener('webkitfullscreenchange', moveButtons);
domElem.addEventListener('mozfullscreenchange', moveButtons);
// for ie11 attach to the document instead of the DOM element
document.addEventListener('MSFullscreenChange', moveButtons);
А для Yandex Games этот способ не работает... В документации я нашел объект screen.fullscreen.request
Но как на него подписаться, чтобы он вызывал мою функцию moveButtons? (я не эксперт по JavaScript, не совсем понимаю, как этот Promise<void> прикрутить к кастомной функции).
Ответы (2 шт):
addEventListener("fullscreenchange") не работет потому что в полноэкранный режим переходит не фрейм игры, а родительський - окно Яндекс.Игры.
Можно самому по интервалу проверять поле status и в случае изменения запускать нужный код.
Вот моя реализация.
const fullscreenObserver = (() => {
const callbacks = [];
const subscribe = callback => callbacks.push(callback);
const dispatch = newStatus => callbacks.forEach(callback => callback(newStatus));
let lastStatus;
setInterval(() => {
const newStatus = ysdk.screen.fullscreen.status;
if (lastStatus !== newStatus) {
dispatch(newStatus);
lastStatus = newStatus;
}
}, 300);
return { subscribe };
})();
// ...
function moveButtons(fullscreen){
console.log(fullscreen); // on | off
}
fullscreenObserver.subscribe(moveButtons);
Поделюсь собственным решением -
YaGames
.init()
.then(ysdk => {
console.log('Yandex SDK initialized');
window.ysdk = ysdk;
var fullscreenStatus = ysdk.screen.fullscreen.status;
setInterval(function() {
if (fullscreenStatus !== ysdk.screen.fullscreen.status) {
fullscreenStatus = ysdk.screen.fullscreen.status;
console.log("ysdk.screen.fullscreen.status has changed to: " + fullscreenStatus);
moveButtons(fullscreenStatus === ysdk.screen.fullscreen.STATUS_ON);
}
}, 1000);
});
А ysdk.screen.fullscreen.request и ysdk.screen.fullscreen.exit, которые я упоминал в своём вопросе - они для смены полноэкранного режима, а не его наблюдения.
