2010-11-08 11 views
31

Estoy teniendo un problema extraño con la plataforma iOS para una página que estoy desarrollando. This es la página en cuestión. Al hacer clic en cualquiera de las imágenes de casos de estudio, la página primero mostrará el estudio de caso requerido y luego se desplazará hacia allí.iPad Parpadeo en desplazamiento automático usando JQuery y el complemento Scrollto

Esto funciona en todos los navegadores de escritorio en Windows y Mac, pero en el iPhone y iPad se obtiene un parpadeo horrible a medida que se desplaza hacia abajo.

No estoy muy seguro de cómo solucionar este problema.

¡Cualquier idea sería de gran ayuda!

Gracias de antemano, Shadi

ACTUALIZA 1

La última página se puede encontrar here. Todavía no he encontrado una solución, si alguien tiene alguna idea, ¡sería increíble!

+0

Ouch. Acabo de probar en mi simulador de iPad y puedo ver lo que quiere decir ... – Fred

+1

¿Tal vez en los dispositivos iphone/ipad el evento click() debería reemplazarse con touch event? No estoy seguro, solo una idea. Creo que el evento de clic en los dispositivos táctiles tiene una duración más larga para distinguirlo de hacer doble clic (tocar) – Prcela

+0

Prcela está correcta, los eventos de clic se deben ignorar y se debe usar touchstart o touchend en su lugar. El uso de los eventos de clic hace que la IU parezca lenta y tiene que ver con la detección de doble repetición. Cuando el usuario toca la pantalla, se activa el evento 'touchstart' y se inicia una cuenta atrás de 300ms. Si el usuario suelta el dedo antes de que el temporizador esté activo, esperará hasta que el temporizador esté activo para enviar el evento de "clic". Si el usuario mantiene el dedo hacia abajo hasta que el temporizador de 300 ms esté activo, el evento de clic se enviará tan pronto como se libere. – Bobby

Respuesta

-1

Necesita agregar e.preventDefault(); a cada llamada .click(). Esto evita la acción predeterminada del navegador, que es permanecer en el mismo lugar. ¡Espero que esto ayude!
decir

$("#quicksand li, .client-list li").click(function (e) { 
    e.preventDefault(); 
    ... 
}); 
+0

¡Ay, no hizo ninguna diferencia :( –

1

No estoy seguro de si esto se aplica a las animaciones jQuery. Pero lo siguiente parece afectar las animaciones de CSS.

http://css-infos.net/property/-webkit-backface-visibility

Sintaxis

-webkit-backface-visibility: visibility; 

Parámetros

visibilidad Determina si o no la cara posterior de un elemento de transformada es visible. El valor predeterminado es visible.

edición

trate de aplicar a cada elemento y ver qué pasa.

*{ 
-webkit-backface-visibility: visible; 
} 

y tratar

*{ 
-webkit-backface-visibility: hidden; 
} 

Es sólo una suposición muy ...

+0

¿Alguna idea de cómo puedo implementar esto en el proyecto? No puedo resolverlo ... –

+0

No estoy seguro. Comenzaría aplicando la opción a todo. Para ver lo que hace. – dubbelj

+0

Gracias @dubbelj por esta sugerencia de la nada. Por cierto, corrige el parpadeo del método de representación de texto cuando entran en juego transiciones, como se ve en operadiperoni.com. Al aplicarlo como "oculto", se fuerza a procesarlo continuamente con un peso ligeramente más delgado. – Barney

14

¿Has probado esto:

$('a[href=#target]'). 
    click(function(){ 
     var target = $('a[name=target]'); 
     if (target.length) 
     { 
      var top = target.offset().top; 
      $('html,body').animate({scrollTop: top}, 1000); 
      return false; 
     } 
    }); 
+0

+1 ¡esta es la respuesta! gracias amigo! – andy

1

también confirmará método de Tund Do funciona a la perfección. Si necesita una variación "izquierda/derecha" de lo mismo (como yo) aquí está:

$('.pg6').click(function(){ 
    var target = $('#page6'); 
    if (target.length) 
    { 
     var left = target.offset().left; 
     $('html,body').animate({scrollLeft: left}, 1000); 
     return false; 
    } 
}); 

yo supongo que se podría combinar los dos, toma la primera posición y la cadena de los anime para un " animación izquierda/derecha/arriba/abajo "también.

-1

Tengo el mismo parpadeo en el iPhone, incluso con las opciones preventDefault y return false de cancelar el evento click predeterminado.Parece que en el dispositivo intenta volver al principio de la página antes de desplazarse. Si tienes activadas las animaciones scrollTop y scrollLeft, realmente no funcionan. Es un problema de jQuery. He visto un método de desplazamiento con mootools que no tiene este problema. Ver esta página: http://melissahie.com/

1

Tuve el mismo problema.

El problema es el complemento ScrollTo. En lugar de usar scrollto.js simplemente use .animate con scrollTop. No más parpadeo en el ipad/iphone.

Aquí está con el parpadeo no http://www.sneakermatic.com

2

Si acaba de desplazamiento vertical de la página se puede sustituir todo el plugin de jQuery scrollTo con esta simple línea:

$('html,body').animate({scrollTop: $("#scrollingTo").offset().top}, 1000, 'easeOutCubic'); 

Personalmente hacer algo como esto

$('html,body').animate({scrollTop: $("#step-1").offset().top-15}, 1000, 'easeOutCubic',function(){ 
    //do stuff 
}); 

he descubierto que si trato de hacer el trabajo de otros js mientras que está desplazándose hace que la contracción del navegador y la animación no es Smoot h. Pero si usa la devolución de llamada, se desplazará primero y luego hará lo que necesite.

Puse un -15 en el extremo de .top porque quería mostrar el borde superior del div que estaba desplazándose, simplemente por motivos estéticos. 1000 es la duración en milisegundos de la animación.

El crédito va al cartel, anima, para el consejo.

60

Si solo necesita desplazamiento vertical, puede usar {'axis':'y'} como configuraciones para el método scrollTo.

$.scrollTo(*selector*, *time*, {'axis':'y'}); 
+0

Eso lo arregló para mí, iPhone 4. – areid

+0

arregla fallas en ipad2 y iphone3GS, ios6, gracias! :) – RecycleRobot

+4

Esta es la respuesta correcta. – tlaverdure

-1

Gracias Nicole por dar el ejemplo con mootools. Realmente parece ser un problema de jQuery cuando se intenta hacer una animación en BOTH scrollTop y scrollLeft.

Con mootools:

var scroll = new Fx.Scroll(window, {duration: 1000, wait: false, transition: Fx.Transitions.quadInOut}); 
scroll.start(y, x); 

funciona sin problemas en IOS5!

+1

La pregunta era sobre jQuery .... – BenjaminRH

2

La definición {'axis': 'y'} lo ha hecho bien. Me ayudó con el deslizamiento hacia arriba/abajo.

+1

Explíquelo ... – Shivaay

+0

cambió .scrollTo (, {'axis': 'xy'}) a .scrollTo (, {'axis': 'y'}) y el parpadeo desapareció. –

1

Debe incluir {axis: 'y'} en su objeto de opciones. También asegúrese de no haber habilitado la opción de interrupción. Puede probar esto con {interrupt: false}.

Cuestiones relacionadas