2013-04-19 22 views
7

E 'possibile forzare lo scorrimento momentum su iphone/ipad in javascript?slancio forza-arresto scorrimento su iphone/ipad in javascript

Extra: abbastanza sicuro che si tratta di torta nel cielo, ma per i punti bonus (onore e gloria), dopo la manipolazione del dom e una pergamena applicata, riprendere lo scorrimento con lo stesso momento prima dello stop forzato. Come?

+2

Hai provato l'impostazione della posizione di scorrimento e troppo pieno disattivando sul corpo/html? È anche possibile riprendere la pergamena, guardare gli eventi di scroll prima di fermarsi e calcolare il tuo 'dy'. Avrai bisogno di ottenere una buona stima per un valore di _friction_ anche se (quanto velocemente rallenta). – Halcyon

+0

Se ho risposto correttamente alla domanda, penso di averlo risposto qui: [Interrompere programmaticamente -webkit-overflow-scrolling] (http://stackoverflow.com/questions/14770891/programatically-halt-webkit-overflow-scrolling/14771980#14771980) – insertusernamehere

+0

OK ragazzi grazie. Provando quanto sia realistica ottenere l'ultimo 'dy' e andare da lì. –

risposta

7

Questo è effettivamente possibile quando si utilizza fastclick.js. La lib rimuove il ritardo di 300 ms sui dispositivi mobili e abilita la cattura degli eventi durante lo scorrimento inerziale/momentum.

Dopo compreso Fastclick e legandolo a l'elemento del corpo, il mio codice per interrompere lo scorrimento e andare verso l'alto si presenta così:

scrollElement.style.overflow = 'hidden'; 
scrollElement.scrollTop = 0; 
setTimeout(function() { 
    scrollElement.style.overflow = ''; 
}, 10); 

Il trucco è quello di impostare overflow: hidden, che ferma l'inerzia/momento scorrimento . Si prega di vedere il mio violino per una piena implementazione di stop scrolling during inertia/momentum.

+5

Reimpostare l'overflow su nascosto, quindi tornare a auto o scorrere è una soluzione solida senza utilizzare fastclick.js. Basta non dimenticare il timeout! – abriggs

+0

Questa è la prima risposta che ho trovato che è semplice e funziona cross-browser. Si noti che 'timeOut' non può essere impostato su' 0' –

0

Ecco il mio codice utilizzando jQuery animazione (in esecuzione evento come onclick)

var obj=$('html, body'); // your element 

if(!obj.is(':animated')) { 

    obj.css('overflow', 'hidden').animate({ scrollTop: 0 }, function(){ obj.css('overflow', ''); }); 

} 

Testato su iPhone 6