2010-11-08 8 views
31

Ho un problema un po 'strano con la piattaforma iOS per una pagina che sto sviluppando. This è la pagina in questione. Quando si fa clic su una qualsiasi delle immagini dello studio del caso, la pagina prima visualizza lo studio del caso richiesto, quindi scorre fino ad esso.Sfarfallio dell'iPad con scorrimento automatico utilizzando il plug-in JQuery e Scrollto

Questo funziona su tutti i browser desktop su Windows e Mac, ma su iPhone e iPad si ottiene uno sfarfallio orribile mentre scorre verso il basso.

Non sei sicuro di come eseguire il debug o correggere questo problema.

Qualsiasi idea sarebbe di grande aiuto!

Grazie in anticipo, Shadi

UPDATE 1

L'ultima pagina può essere trovato here. Non ho ancora trovato una soluzione - se qualcuno ha qualche idea sarebbe fantastico!

+0

Ouch. Appena testato sul mio simulatore iPad e posso vedere cosa intendi ... – Fred

+1

Forse su dispositivi iphone/ipad l'evento click() dovrebbe essere sostituito con un evento touch? Non sono sicuro, solo un'idea. Penso che l'evento click sui dispositivi touch abbia una durata maggiore per distinguerlo dal doppio clic (touch) – Prcela

+0

Prcela è corretto, gli eventi click devono essere ignorati e al loro posto devono essere utilizzati touchstart o touchend. L'uso degli eventi click rende l'interfaccia utente lenta e ha a che fare con il rilevamento doubletap. Quando l'utente tocca lo schermo, viene attivato l'evento "touchstart" e viene avviato un conto alla rovescia di 300 ms. Se l'utente rilascia il dito prima che il timer sia attivo, attenderà fino a che il timer è scaduto per inviare l'evento "click". Se l'utente tiene il dito premuto fino al termine del timer 300ms, l'evento click verrà inviato non appena verrà rilasciato. – Bobby

risposta

-1

È necessario aggiungere e.preventDefault(); a ciascuna chiamata .click(). Ciò impedisce l'azione predefinita del browser, che deve rimanere nello stesso posto. Spero che questo ti aiuti!
cioè

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

Purtroppo non ha fatto differenza :( –

1

Non sono sicuro se questo vale per le animazioni jQuery. Ma quanto segue sembra influenzare le animazioni CSS.

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

sintassi

-webkit-backface-visibility: visibility; 

Parametri

visibilità Determina se la faccia posteriore di un elemento trasformata è visibile. Il valore predefinito è visibile.

modificare

provare ad applicare ad ogni elemento e vedere cosa succede.

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

e cercare

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

E 'solo una supposizione davvero ...

+0

Qualche idea su come posso implementarlo nel progetto? Non riesco proprio a risolverlo ... –

+0

Non ne sono sicuro. Vorrei iniziare applicando l'opzione a tutto. Per vedere cosa fa – dubbelj

+0

Grazie a @dubbelj per questo suggerimento fuori dal nulla. Per inciso, risolve lo sfarfallio del metodo di rendering del testo quando entrano in gioco le transizioni, come si vede su operadiperoni.com. Applicandolo come 'nascosto 'lo costringe a renderlo continuamente nel peso leggermente più sottile. – Barney

14

Hai provato questo:

$('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 questa è la risposta! grazie amico! – andy

1

ho anche confermare il metodo di Tund Do funziona perfettamente. Se avete bisogno di una variante "destra/sinistra" della stessa cosa (come ho fatto io) qui è:

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

direi si potrebbe combinare le due cose, prendere la prima posizione e la catena delle Animates per una " sinistra/destra/su/giù "anche l'animazione.

-1

Ho lo stesso sfarfallio su iPhone - anche con preventDefault e restituisco false opzioni di annullamento dell'evento di clic predefinito.Sembra che sul dispositivo tenti di tornare all'inizio della pagina prima di scorrere. Se hai sia un'animazione scrollTop che un'animazione ScrollLeop su di essa diventa davvero buggy. È un problema di jQuery. Ho visto un metodo di scorrimento con mootools che non presenta questo problema. Vedi questa pagina: http://melissahie.com/

1

Ho avuto lo stesso problema.

Il problema è il plugin ScrollTo. Invece di usare scrollto.js basta usare .animate con scrollTop. Non più sfarfallio in ipad/iphone.

Qui è senza sfarfallio http://www.sneakermatic.com

2

Se stai solo scorrendo la pagina in verticale è possibile sostituire l'intero plugin per jQuery scrollTo con questa semplice riga:

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

Personalmente mi fare qualcosa di simile

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

ho scoperto che se provo a fare il lavoro altro js mentre è lo scorrimento rende la crisi del browser e l'animazione non è smoot h. Ma se usi la funzione di callback, prima scorrerà, quindi farà ciò di cui hai bisogno.

Ho messo un -15 alla fine di .top perché volevo mostrare il bordo superiore del div che stavo scorrendo, semplicemente per scopi estetici. 1000 è la durata in millisecondi dell'animazione.

Il credito va al poster, animato, per la mancia.

60

Se è necessario solo lo scorrimento verticale, è possibile utilizzare {'axis':'y'} come impostazioni per scorrere il metodo.

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

Questo problema è stato risolto per me, iPhone 4. – areid

+0

risolve glitch su ipad2 e iphone3GS, ios6, grazie! :) – RecycleRobot

+4

Questa è la risposta corretta. – tlaverdure

-1

Grazie nicole per dare l'esempio con mootools. Sembra davvero un problema di jQuery quando si prova a fare un'animazione su BOTH scrollTop e scrollLeft.

con MooTools:

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

funziona senza problemi su iOS5!

2

Definizione di '' asse ':' y '} ha risolto correttamente! Mi ha aiutato con slideUp/Down flickering.

+1

Per favore spiegalo .. – Shivaay

+0

modificato .scrollTo (, {'axis': 'xy'}) in .scrollTo (, {'axis': 'y'}) e lo sfarfallio non c'è più. –

1

È necessario includere {axis: 'y'} nell'oggetto opzioni. Assicurarsi inoltre di non aver abilitato l'opzione di interruzione. Puoi testarlo con {interrupt: false}.

Problemi correlati