2011-11-11 16 views
10

Tengo un problema visual incómodo. Quiero una buena transición al cambiar páginas en una aplicación. Desafortunadamente, la primera vez que cambio a otra página, en lugar de deslizar la página actual y la nueva, la página actual se reemplaza inmediatamente por la nueva página y luego se desliza hacia afuera. Cuando la primera página está fuera de la vista, se muestra la nueva página. Sin embargo, la segunda vez, ¡funciona como un encanto!Phonegap/jquery La transición de diapositivas móviles no funciona correctamente en la primera llamada

Esto está funcionando en el iPhone con jQuery Mobile + PhoneGap

hice un video para ayudar a aclarar el tema: http://www.youtube.com/watch?v=Ybvzh_wTnSE

<body style="background-color: #000;"> 
     <div id="container" style="display:none;"> 
      <div id="side-menu" style="display:none;"> 
       <div id="header_top"></div> 
       <a href="#dives" onclick="showdives();"><div id="header_dives" class="selected"></div></a> 
       <div id="header_spacer1"></div> 
       <a href="#explore" onclick="showexplore();"><div id="header_explore"></div></a> 
       <div id="header_spacer2"></div> 
       <a href="#search" onclick="showsearch();"><div id="header_search"></div></a> 
       <div id="header_spacer3"></div> 
       <a href="#settings" onclick="showsettings();"><div id="header_settings"></div></a> 
       <div id="header_bottom"></div> 
      </div> 
      <div id="slide_mask"> 
       <!-- START of LOGIN page --> 
       <div data-role="page" id="login">   
        <div id="home_frame"> 
         <div id="home_logo"></div> 
         <div id="home_fblogin" onclick="login()"></div> 
         <div class="home_login"> 
          <p>Email: <input type="text" name="user[email]" size="30"/></p> 
          <p>Password: <input type="password" name="user[password]" size="30"/></p> 
          <button onclick="show_page_home();">LOGIN</button> 
         </div> 
        </div> 
       </div> 
       <!-- END of LOGIN page --> 

       <!-- START of LOGIN page --> 
       <div data-role="page" id="dives" class="right_pane">  
         <p>My dives !</p>  
       </div><!-- /content --> 
       <div data-role="page" id="explore" class="hidden right_pane"> 
         <p>My explore !</p>  
       </div><!-- /content --> 
       <div data-role="page" id="search" class="hidden right_pane">  
         <p>My search !</p>  
       </div><!-- /content --> 
       <div data-role="page" id="settings" class="hidden right_pane"> 
         <p>My settings !</p> 
         <button onclick="logout_db();">logout</button>  
       </div><!-- /content --> 
       <!-- END of LOGIN page --> 
      </div> 
     </div> 
     <div id="log"></div> 
     <div id="data"></div> 
    </body> 

Y el CSS relevante:

body {margin: 0; font: 18px Helvetica; text-align: center; background-color: #000; background: url(../img/bg_big.png) repeat; 
     -webkit-user-select: none; /* prevent copy paste for all elements */ 
     } 
    #container { width:320px; height:460px; overflow: hidden;} 

    input{ -webkit-user-select: text; /* enable copy paste for elements with this class */} 
    a {-webkit-user-select: none; /* prevent copy paste for all elements */} 
    span {-webkit-user-select: none; /* prevent copy paste for all elements */} 

    #side-menu {z-index: 1000 !important; position: fixed; height: 460px; width: 56.5px; background: url(../img/bg_big.png) no-repeat; display: inline-block; 
    overflow: hidden; top: 0px; left: 0px; } 
    #header_top {background: url(../img/header/header_top.png) no-repeat; background-size: 56.5px 48.96px; width: 56.5px; height: 48.96px; display: block;} 
    #header_dives {background: url(../img/header/dives.png) no-repeat; background-size: 56.5px 51.75px; width: 56.5px; height: 51.75px; display: block;} 
    #header_dives.selected{background: url(../img/header/dives_selected.png) no-repeat;} 
    #header_spacer1{background: url(../img/header/header_space1.png) no-repeat; background-size: 56.5px 13.9px; width: 56.5px; height: 13.9px; display: block;} 
    #header_explore{background: url(../img/header/explore.png) no-repeat; background-size: 56.5px 51.75px; width: 56.5px; height: 51.75px; display: block;} 
    #header_explore.selected{background: url(../img/header/explore_selected.png) no-repeat;} 
    #header_spacer2{background: url(../img/header/header_space2.png) no-repeat; background-size: 56.5px 15.33px; width: 56.5px; height: 15.33px; display: block;} 
    #header_search{background: url(../img/header/search.png) no-repeat; background-size: 56.5px 51.75px; width: 56.5px; height: 51.75px; display: block;} 
    #header_search.selected{background: url(../img/header/search_selected.png) no-repeat;} 
    #header_spacer3{background: url(../img/header/header_space3.png) no-repeat; background-size: 56.5px 17.73px; width: 56.5px; height: 17.73px; display: block;} 
    #header_settings{background: url(../img/header/settings.png) no-repeat; background-size: 56.5px 51.75px; width: 56.5px; height: 51.75px; display: block;} 
    #header_settings.selected{background: url(../img/header/settings_selected.png) no-repeat;} 
    #header_bottom{background: url(../img/header/header_bottom.png) no-repeat; background-size: 56.5px 160px; width: 56.5px; height: 160px; display: block;} 

    .hidden {display: none;} 
    .right_pane{width: 263.5px !important; background: url(../img/right_bg.png) no-repeat; background-size:263.5px 460px; width: 263.5px; height: 460px; left: 56.5px !important;} 
    #slide_mask{ display: inline-block; overflow: hidden; padding-left: 56.5px; width: 263.5px; height: 460px; top: 0;} 

y la poco de JS:

/////////////////////////////////// 
    //MENU MECHANICS 
    /////////////////////////////////// 

    function showdives(){ 
     $("#side-menu .selected").removeClass("selected"); 
     $("#header_dives").addClass("selected"); 
    } 

    function showexplore(){ 
     $("#side-menu .selected").removeClass("selected"); 
     $("#header_explore").addClass("selected"); 
    } 
    function showsearch(){ 
     $("#side-menu .selected").removeClass("selected"); 
     $("#header_search").addClass("selected"); 
    } 
    function showsettings(){ 
     $("#side-menu .selected").removeClass("selected"); 
     $("#header_settings").addClass("selected"); 
    } 

Los métodos onclick solo agregan/eliminan la clase "seleccionada" a/desde los elementos del menú.

+0

Buen video y explicación del problema. Tu problema probablemente esté en tu Javascript, por lo que debes incluir ese código también. – Spike

+0

hecho :) como puedes ver es sencillo ... –

+0

también transiciones "pop" y "voltear" funcionan como un amuleto –

Respuesta

3

Creo que las personas se refieren a esto como "parpadeo", por lo que obtendrá mejores resultados cuando busque eso. Después de mirar a su alrededor, parece que su problema es común en Android y se puede resolver mediante la adición de la siguiente CSS:

.ui-page { 
    -webkit-backface-visibility: hidden; 
} 

Estas son algunas referencias:

+1

Hola Spike - intentado pero no es así :(En realidad, no creo que esté parpadeando:/ –

+0

Hmm ... Lo siento, entonces no lo sé. Tal vez algo con el emulador de Android? ¿Hace lo mismo en iOS? – Spike

+0

Solo tengo el issie en iOS - android está bien (y en ambos casos el emu y el dispositivo se comportan igual) –

3

Yo y mis amigos estamos usando J Consulta 1.2.

La forma de resolver este problema fue poner data-transition = "none". Tal vez esto no puede parecer móvil

estilo que mucho, pero funciona y eliminar el problema de parpadeo.

Espero que esta ayuda.

0

Tuve el mismo problema, pero aún peor, al envolver una aplicación móvil de Jquery en Phonegap. No solo las transiciones de las páginas parpadeaban, sino que la interfaz de usuario estaba completamente rota. Usé Jquery 1.8 y Jquery mobile 1.2 en esta aplicación.

He intentado la mayoría de las soluciones sugeridas aquí en SO, pero nada funcionó. Entonces encontré la solución this de Piotr Walczyszyn, ¡y todo funcionó como un sueño! Muy recomendado para cualquiera que use Jquery mobile y Phonegap juntos.

Cuestiones relacionadas