if语句在while循环中。它为什么这样做?

时间:2010-08-17 16:15:30

标签: javascript jquery iphone ipad while-loop

我正在使用它:

//if in landscape mode
while(window.orientation == 90 || window.orientation == -90) {
                    if(!$('#page' + hiddenNextPage).hasClass('showUp')) {
                        $('#page' + hiddenNextPage).addClass('showUp');
                        $('#page' + hiddenNextPage).css('margin-left', '300px');
                    };
                }

//if in portrait mode
while(window.orientation == 0) {
                    if($('#page' + hiddenNextPage).hasClass('showUp')) {
                        $('#page' + hiddenNextPage).removeClass('showUp');
                        $('#page' + hiddenNextPage).css('margin-left', '5px');
                    };
                };

但它使我的页面不再加载..&加载这个需要这么长时间。它有什么问题吗?

是否有更好的方法可以不使用while循环不断检查方向是否已更改?

这是针对ipad / iphone的 谢谢!

4 个答案:

答案 0 :(得分:6)

我没有看到你的while循环体正在修改while测试。这会产生无限循环。

答案 1 :(得分:5)

由于您只是在更改样式,因此可以使用单独的样式表来处理纵向和横向...

<link rel="stylesheet" media="all and (orientation:portrait)" href="portrait.css">
<link rel="stylesheet" media="all and (orientation:landscape)" href="landscape.css">

修改

onorientationchange上还有一个window事件,它允许您在方向更改时运行代码,而不是不断轮询更改...

window.onorientationchange = function (event)
{
    if (window.orientation == 90 || window.orientation == -90)
    {
        ...
    }
    else
    {
        ...
    }
}

答案 2 :(得分:3)

我认为你根本不应该使用while循环。

如果要定期执行代码,请使用超时或间隔。

此外,您的jQuery效率非常低 - 尤其是如何多次重新运行选择器。

var $nextPage = $('#page' + hiddenNextPage );

window.setInterval( function()
{
  if ( 0 == window.orientation )
  {
    if ( $nextPage.hasClass( 'showUp' ) )
    {
      $nextPage
        .removeClass( 'showUp' )
        .css( 'margin-left', '5px' )
      ;
    }
  }
  else if ( !$nextPage.hasClass( 'showUp' ) )
  {
    $nextPage
      .addClass( 'showUp' )
      .css( 'margin-left', '300px' )
    ;
  }
}, 100 ); // 100 means this will execute every 100 milliseconds

答案 3 :(得分:2)

我建议使用单独的样式表,但到目前为止,您不断检查的问题可以通过setInterval ( expression, interval );设置超时时间。
例如:

setInterval(function() {
   if ((window.orientation == 90 || window.orientation == -90) {
      if(!$('#page' + hiddenNextPage).hasClass('showUp')) {
         $('#page' + hiddenNextPage).addClass('showUp');
         $('#page' + hiddenNextPage).css('margin-left', '300px');
      }
   } else if (window.orientation == 0) {
      if($('#page' + hiddenNextPage).hasClass('showUp')) {
         $('#page' + hiddenNextPage).removeClass('showUp');
         $('#page' + hiddenNextPage).css('margin-left', '5px');
      }
   }
}
, 2000 );

编辑第一次意外使用setTimeout而不是setInterval,oops。