Переменные Javascript повреждены в обработчике событий изменения ориентации iPad - PullRequest
3 голосов
/ 26 октября 2011

Я разрабатываю слайдер страниц каталога Html и Javascript для iPad, который показывает одну страницу в портретной ориентации и две страницы в альбомной ориентации.

При каждом изменении ориентации в событии манипулируют двумя переменнымиобработчик.

Переменные повреждаются, когда я бросаю и быстро поворачиваю iPad.Они хороши, когда я работаю так, как обычно (довольно медленно).

Я пытался использовать переменную locked, чтобы предотвратить запуск обработчика, если он еще не завершен,то есть в случае, если мобильный Safari прерывает выполнение Javascript при изменении ориентации:

function updateOrientation() {
    if (locked) return;
    locked = true;
    ...

Однако, похоже, это никогда не происходит;обработчик всегда завершает работу, прежде чем вызывается снова.

Следовательно, как переменные могут быть повреждены?

Есть идеи?

1 Ответ

2 голосов
/ 27 октября 2011

Я нашел ответ.

Обычно я ожидаю, что событие изменения ориентации повлечет за собой изменение ориентации, то есть window.orientation должно изменить значение (портрет -> пейзаж или пейзаж -> портрет).

Однако быстрые броски и повороты приводят к тому, что обработчик событий вызывается два раза подряд с одним и тем же значением, считываемым из window.orientation.Это неожиданно и портит переменные состояния.

Я решил проблему, сохранив последнюю известную ориентацию и немедленно вернувшись, если значение не изменилось с прошлого раза.

function updateOrientation() {
if (lastOrientation == isPortrait()) return; // prevent erroneous orientation changes
lastOrientation = isPortrait();
...