Минимальный код ниже показывает это.
Код: Выделить всё
Код: Выделить всё
window.onresize = function() {
let ScreenWidth = window.innerWidth;
let ScreenHeight = window.innerHeight;
console.log("w: " + ScreenWidth);
console.log("h: " + ScreenHeight);
let canvas = document.getElementById('canvas');
// Woa! This is the mischief.
canvas.style.width = ScreenWidth + "px";
canvas.style.height = ScreenHeight + "px";
};
// Dispatch the event.
window.dispatchEvent(new Event('resize'));
Теперь к вопросу. Первое принудительное событие изменения размера предназначено для немедленного изменения масштаба холста. Мои значения в console.log(): 360, 649.
Когда я поворачиваю телефон, событие отправляется снова, и значения составляют 705, 274. Несколько отличается из-за заголовка браузера (адресной строки), но разумные значения.
Снова поворачиваем обратно! Теперь значения 705, 1271. Я ожидал, что они вернутся к 360, 649.
Что происходит?! Если я удалю линии, меняющие холст w и h, «ошибка» исчезнет, и вращение телефона вперед и назад будет правильно переключаться между 360, 649 и 705, 274.
Может ли это быть связано с тем, что я установил ширину холста на 705 при вращении? Но InternalWidth должен отражать фактическую область просмотра, а не ширину контента, или я неправильно читаю документацию?
https://developer.mozilla.org/en-US/doc ... innerWidth
Изменить:
Похоже, это исправляет несоответствие:
От:
Код: Выделить всё
Код: Выделить всё
Подробнее здесь: https://stackoverflow.com/questions/799 ... tation-and
Мобильная версия