3

我正在为 iPad 开发一个 Html 和 Javascript 目录页面滑块,它显示一页纵向和两页横向。

用于维护目录状态的两个变量在事件处理程序中的每个方向变化时被操纵。

当我快速折腾和转动 iPad 时,变量已损坏。当我像通常那样操作它时它们很好(也就是说,相当慢)。

我尝试使用一个locked变量来防止处理程序在尚未完成时运行,即如果移动 Safari 在方向更改时中断 Javascript 执行:

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

然而,情况似乎从来都不是这样。处理程序总是在再次调用之前完成。

因此,变量如何被破坏?

有任何想法吗?

4

1 回答 1

2

我找到了答案。

通常,我希望方向更改事件意味着方向更改,即window.orientation应该更改值(纵向-> 横向或横向-> 纵向)。

但是,快速折腾会导致事件处理程序连续两次被调用,并从window.orientation. 这是意料之外的,并且会破坏状态变量。

我通过保持最后一个已知方向解决了这个问题,如果自上次以来该值没有改变,则立即返回。

function updateOrientation() {
if (lastOrientation == isPortrait()) return; // prevent erroneous orientation changes
lastOrientation = isPortrait();
于 2011-10-27T08:20:14.973 回答