2012-02-21 12 views
5

Me gustaría desplazarme automáticamente a un div en particular cuando se carga la página. Sin embargo, parezco entrar en conflicto con la funcionalidad scroll de JQM.jQuery Mobile - desplácese a div específico en la carga de la página

estoy usando el siguiente código:

$.mobile.silentScroll($("#myElementId").offset().top); 

el cual no se desplaza correctamente cuando se envuelve la siguiente manera:

$('[data-role=page]').bind("pageshow", function() { 
    $.mobile.silentScroll($("#myElementId").offset().top); 
}); 

pero funciona correctamente con un poco de tiempo de espera de la siguiente manera:

$('[data-role=page]').bind("pageshow", function() { 
    setTimeout(function(){$.mobile.silentScroll($("#myElementId").offset().top);},100); 
}); 

el problema con la última pieza de código es que causa un parpadeo, con un salto al p y luego un salto abajo de la página. ¿Alguna idea de cómo evitar esto?

Respuesta

2

Su setTimeout funciona porque la infraestructura de jQuery Mobile recuerda dónde se desplazó: si está volviendo a una página en la que ha estado antes y tiene que esperar a que se complete su desplazamiento antes de ejecutar la suya. Puede desactivar esencialmente esta característica cambiando la opción minScrollBack dentro del manejador mobileinit caso a algo muy grande:

<script src="[jQuery Core]"></script> 
<script> 
$(document).bind("mobileinit", function(){ 
    $.mobile.minScrollBack = 90000; 
}); 
</script> 
<script src="[jQuery Mobile]"></script> 

Eso debería desactivar el desplazamiento automático que el marco jQuery Mobile no cuando se visita una página en una visita posterior .

Docs: http://jquerymobile.com/demos/1.0.1/docs/api/globalconfig.html

+0

Gracias Jasper, pero incluso después de agregar su código entre jQuery core y JQM, todavía no funciona. No creo que sea un problema con minScrollBack, porque incluso ocurre después de una actualización completa de la página. En ese momento, JQM no debería poder recordar dónde me desplazaron antes. – Steve

2

Primera entrada en StackOverflow!

Gracias por esto, he estado trabajando en un proyecto que usa bastante animación personalizada para las transiciones y aunque me tomó un tiempo llegar aquí, la respuesta de Jasper me dirigió en la dirección correcta, solo faltaba una un poco de código:

<script src="[jQuery]"></script> 
<script> 
$(document).bind("mobileinit", function(){ 
    $.extend($.mobile, { 
     minScrollBack: 90000 // turn off scrolling to position on last page 
    }); 
}); 
</script> 
<script src="[jQuery mobile]"></script> 

¡Esto pareció hacer el truco!

Ref: http://jquerymobile.com/test/docs/api/globalconfig.html

0

Ustedes vez ha tratado la respuesta ???

No funciona a menos que configure $ .mobile.defaultHomeScroll en su desplazamiento deseado también.

Es decir, dos pasos. 1. configure $ .mobile.minScrollBack en un valor suficientemente grande. 2. en la carga de la página, configure el desplazamiento de inicio predeterminado en el valor deseado.

Entonces funciona.

0

No tuve que hacer mucho ... Lo conseguí trabajando con lo siguiente en la sección.

<script>$(function() {$.mobile.defaultHomeScroll = $(window).scrollTop();});</script> 
Cuestiones relacionadas