można obliczyć prędkość bezstykowa i spróbować dowiedzieć się, czy pędu przewijania nastąpi na podstawie pewnej wartości progowej. Zrobiłem kilka testów i około 0.25 pikseli/ms wydaje się być dobrą wartością.
Uwaga: Czasami przewijanie pędu będzie występować również dla mniejszych prędkości. Najniższa prędkość powodująca przewijanie pędu, które zarejestrowałem, wynosiła 0,13 (z bardzo krótkim czasem delta), więc jeśli potrzebujesz 100% idealnego rozwiązania, szukaj dalej.
Kod przykładowy wykrywa i radzi sobie z przewijaniem.
Korzystanie z 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();
}
});
To jest fantastyczne! Walczyłem, by przewinąć wewnętrzny div, i włączając tę pędu, cała logika snapu wyszła przez okno. Brakuje ci przecinków i zmienna opakowania nie jest zdefiniowana. W przeciwnym razie jest wspaniale! – Chris
Cieszę się, że znalazłeś przydatne. Dziękuję za wskazanie błędów. – dagge
bardzo ładne. zrób z tego demo. może być użyteczne dla innych do szybkiego sprawdzenia wyniku. –