#javascript #ipad #dom-events #landscape-portrait #orientation-changes
#javascript #iPad #dom-события #альбомная-портретная #ориентация-изменения
Вопрос:
Я разрабатываю pageslider каталога Html и Javascript для iPad, который показывает одну страницу в портретном и две страницы в альбомной ориентации.
Две переменные для поддержания состояния каталога обрабатываются при каждом изменении ориентации в обработчике событий.
Переменные повреждены, когда я быстро переворачиваю iPad. Они в порядке, когда я использую его так, как обычно (то есть довольно медленно).
Я попытался использовать locked
переменную, чтобы предотвратить запуск обработчика, если он еще не завершен, т. Е. В случае, если mobile Safari прерывает выполнение Javascript при изменении ориентации:
function updateOrientation() {
if (locked) return;
locked = true;
...
Однако, похоже, это никогда не так; обработчик всегда завершается до того, как он будет вызван снова.
Следовательно, как переменные повреждаются?
Есть идеи?
Ответ №1:
Я нашел ответ.
Обычно я ожидаю, что событие изменения ориентации будет подразумевать изменение ориентации, т. Е. window.orientation
Должно измениться значение (книжная -> альбомная или альбомная -> портретная).
Однако быстрые броски и повороты приводят к тому, что обработчик события вызывается два раза подряд с одним и тем же значением, из которого считывается window.orientation
. Это неожиданно и искажает переменные состояния.
Я решил проблему, сохранив последнюю известную ориентацию и немедленно вернувшись, если значение не изменилось с прошлого раза.
function updateOrientation() {
if (lastOrientation == isPortrait()) return; // prevent erroneous orientation changes
lastOrientation = isPortrait();