2010-04-29 8 views
33

Qualcuno ha notato questo comportamento? Sto provando a scrivere uno script che si innescherà dopo un ridimensionamento. Funziona bene con i normali browser, funziona bene su iPhone, ma su iPad, si innescherà solo passando da una vista orizzontale a quella verticale, non viceversa.L'iPad non attiva l'evento di ridimensionamento passando da verticale a orizzontale?

Ecco il codice:

$(window).resize(function() { 

    var agent=navigator.userAgent.toLowerCase(); 
    var is_iphone = ((agent.indexOf('iphone') != -1)); 
    var is_ipad = ((agent.indexOf('ipad') != -1)); 

    if(is_iphone || is_ipad){ 
     location.reload(true); 
    } else {  
     /* Do stuff. */ 
    }; 
}); 
+1

Add tag webapp o iphone-web? – Emil

risposta

45

Se ho capito bene, vuoi fare qualcosa quando l'utente inclina l'iPad. Qui si va:

window.onorientationchange = function(){ 

    var orientation = window.orientation; 

    // Look at the value of window.orientation: 

    if (orientation === 0){ 

     // iPad is in Portrait mode. 

    } 

    else if (orientation === 90){ 

     // iPad is in Landscape mode. The screen is turned to the left. 

    } 


    else if (orientation === -90){ 

     // iPad is in Landscape mode. The screen is turned to the right. 

    } 

} 

The left picture shows portrait mode, the right one landscape mode

+0

Ho scelto la tua risposta perché era la risposta più concisamente corretta. Come punto di notazione, però, la soluzione che ho seguito non includeva nessuno dei controlli "se". Ha semplicemente eseguito il codice (in particolare una pagina di ricarica) quando l'orientamento è stato modificato. – dclowd9901

+1

@ dclowd9901 Sì, pensavo così, volevo solo fornire alcune informazioni extra :) – Vincent

+2

Hai dimenticato quando 'orientation === 180'. È quando l'iPad viene capovolto. – Mageek

1

The only thing I could find from apple:

Safari su iPad e Safari su iPhone non hanno finestre ridimensionabili. In Safari su iPhone e iPad, le dimensioni della finestra sono impostate sulla dimensione dello schermo (meno i controlli dell'interfaccia utente di Safari) e non possono essere modificate dall'utente. Per spostarsi all'interno di una pagina Web, l'utente cambia il livello di zoom e la posizione della vista mentre tocca due volte o pizzica per ingrandire o ridurre, oppure toccando e trascinando per scorrere la pagina. Quando un utente modifica il livello di zoom e la posizione della finestra, lo fanno all'interno di un'area di contenuto visibile di dimensioni fisse (ovvero, la finestra). Ciò significa che gli elementi della pagina web che hanno la loro posizione "corretta" nella vista possono finire fuori dall'area di contenuto visualizzabile, fuori dallo schermo.

Capisco la parte "opere su iPhone" ... ma forse non lo è più? Questo potrebbe essere un cambiamento in OS/mobile Safari da quando è stata rilasciata l'ultima versione del sistema operativo pubblico per iPhone (la documentazione di cui sopra è da marzo 2010).

Ho intenzione di ricodificare questa domanda aggiungendo iPhone, forse uno dei ragazzi con la versione 4.0 del sistema operativo dello sviluppatore può testarlo? Se è stato rimosso, questo dovrebbe essere un bug archiviato/riparato prima che vada in diretta ... Non sono sicuro di come siano le procedure su questo con Apple.

+0

Grazie per aver cercato e aggiunto il tag. Per complicare la mia confusione, non sono un maestro zen Javascript, quindi non ero nemmeno sicuro se stavo mettendo insieme il codice correttamente. – dclowd9901

+0

@ dclowd9901 - Il codice sembra a posto, solo un extra ';' dopo il 'if' there :) Solo curioso, perché è necessario ricaricare quando la pagina viene ridimensionata? –

+0

Ho funzionalità in un plug-in di presentazione che ho scritto che le dà la visualizzazione a schermo intero con un parametro. Gli utenti hanno portato alla mia attenzione che la mancanza di ridimensionamento delle finestre è stata una svista. Ho provato a scrivere un bandaid prima di rilasciare una nuova versione testata, ma ho trovato il problema su cui ho postato. – dclowd9901

14

Penso che ciò che si vuole sarebbe quella di utilizzare il iPad Orientation CSS, che assomiglia a questo:

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

Inoltre, i orientationchange evento si attiva quando l'orientamento è cambiato, secondo iPad web development tips.

Insieme, questo dovrebbe darvi strumenti sufficienti per gestire il cambiamento.

+0

Non riesco ancora a testarlo, ma probabilmente è esattamente quello che sto cercando. Grande risorsa generale anche per lo sviluppo generale di iPad. Grazie in anticipo artlung! Non vedo l'ora di provarlo! – dclowd9901

+0

Cool! Spero che sia utile Ho un amico che ne ha appena preso uno e sono ansioso di giocarci. – artlung

+0

Questo non sembra funzionare. Il browser safari non sembra riconoscere la proprietà 'orientationchange'. – dclowd9901

0

Controlla la tua versione di iOS.

L'evento "orientationChange" non funziona in iOS 3. *, ma lo fa in 4. *

0
  1. fare un bel controllo se la vostra piattaforma è iPad,
  2. gestire l'evento specifico iOS orientationChange catturando window.onorientationchange

    if(navigator.platform == 'iPad') { 
        window.onorientationchange = function() { 
         // handle orientationchange event 
         // (here you can take advantage of the orientation property 
         //  - see the good answer above by Vincent) 
        }  
    } 
    
+2

Penso che sarebbe meglio controllare 'window.orientation', quindi verificare esplicitamente il dispositivo nella maggior parte delle situazioni. – alex

7

Questo include tutti gli orientamenti.

Qui ci sono due opzioni:

window.onorientationchange = function() { 

    var orientation = window.orientation; 

    // Look at the value of window.orientation: 

    if (orientation === 0) { 
    // iPad is in Portrait mode. 

    } else if (orientation === 90) { 
    // iPad is in Landscape mode. The screen is turned to the left. 

    } else if (orientation === -90) { 
    // iPad is in Landscape mode. The screen is turned to the right. 

    } else if (orientation === 180) { 
    // Upside down portrait. 

    } 
}  

o

// Checks to see if the platform is strictly equal to iPad: 
    if(navigator.platform === 'iPad') { 
      window.onorientationchange = function() { 

      var orientation = window.orientation; 

      // Look at the value of window.orientation: 

      if (orientation === 0) { 
      // iPad is in Portrait mode. 

      } else if (orientation === 90) { 
      // iPad is in Landscape mode. The screen is turned to the left. 

      } else if (orientation === -90) { 
      // iPad is in Landscape mode. The screen is turned to the right. 

      } else if (orientation === 180) { 
      // Upside down portrait. 

      } 
      }  
     } 
Problemi correlati