È possibile calcolare una velocità di scorrimento e cercare di capire se si verificherà lo scorrimento del momento in base a un valore di soglia. Ho fatto alcuni test e circa 0,25 pixel/ms sembra essere un buon valore.
Nota: talvolta lo scorrimento del momento si verifica anche a velocità inferiori. La velocità più bassa per causare lo scorrimento del momento che ho registrato è stata 0,13 (con tempo di delta molto breve), quindi se hai bisogno di una soluzione perfetta al 100%, continua a cercare.
Il codice di esempio rileva e gestisce anche l'overscrolling.
Utilizzo di JQuery;
var scrollWrapper = $('#myWrapper');
var starTime, startScroll, waitForScrollEvent;
scrollWrapper.bind('touchstart', function() {
waitForScrollEvent = false;
});
scrollWrapper.bind('touchmove', function() {
startTime = new Date().getTime(); startScroll = scrollWrapper.scrollTop();
});
scrollWrapper.bind('touchend', function() {
var deltaTime = new Date().getTime() - startTime;
var deltaScroll = Math.abs(startScroll - scrollWrapper.scrollTop());
if (deltaScroll/deltaTime>0.25
|| scrollWrapper.scrollTop()<0
|| scrollWrapper.scrollTop()>scrollWrapper.height()) {
// will cause momentum scroll, wait for 'scroll' event
waitForScrollEvent = true;
}
else {
onScrollCompleted(); // assume no momentum scroll was initiated
}
startTime = 0;
});
scrollWrapper.bind('scroll', function() {
if (waitForScrollEvent) {
onScrollCompleted();
}
});
Questo è fantastico! Ho faticato a rendere scorrevole una div interna e, abilitando lo slancio, tutta la logica di scatto ero uscito dalla finestra. Mancano un paio di virgole e la variabile wrapper non è definita. Altrimenti è fantastico! – Chris
Felice di averlo trovato utile. Grazie per aver segnalato gli errori. – dagge
molto bello. fare una demo per questo. potrebbe essere utile per gli altri per verificare rapidamente il risultato –