si instruction à l'intérieur en boucle. Pourquoi ça fait ça?

voix
0

J'utilise ceci:

//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');
                    };
                };

Mais ce faisant mes pages ne se charge pas même plus .. et il faut si longtemps pour charger ce. Y at-il quelque chose de mal avec elle?

Y at-il une meilleure façon de vérifier en permanence si l'orientation a été modifiée sans utiliser une boucle while?

Ceci est pour ipad / iphone
Merci!

Créé 17/08/2010 à 17:15
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
6

Je ne vois pas que les corps de vos boucles tout en modifient les tests de temps. Cela produit une boucle infinie.

Créé 17/08/2010 à 17:20
source utilisateur

voix
5

Puisque vous êtes seulement l'évolution des styles, vous pouvez utiliser des feuilles de style distinctes pour les modes portrait et paysage ...

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

MODIFIER

Il y a aussi un onorientationchangeévénement windowqui vous permet d'exécuter du code lorsque l'orientation change plutôt que de constamment scrutin pour un changement ...

window.onorientationchange = function (event)
{
    if (window.orientation == 90 || window.orientation == -90)
    {
        ...
    }
    else
    {
        ...
    }
}
Créé 17/08/2010 à 17:20
source utilisateur

voix
3

Je ne pense pas que vous devriez utiliser une boucle while du tout.

Si vous voulez exécuter du code périodiquement, utilisez un délai d'attente ou l'intervalle.

En outre, votre jQuery est très inefficace - en particulier la façon dont vous re-exécuter le sélecteur tant de fois.

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
Créé 17/08/2010 à 17:29
source utilisateur

voix
2

Je vous recommande de feuilles de style séparées, mais pour autant votre question vous pouvez vérifier constamment définir un délai par setInterval ( expression, interval );

exemple:

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 );

modifier Accidentellement utilisé setTimeout au lieu de setInterval la première fois, oups.

Créé 17/08/2010 à 17:22
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more