Choć nie jest to możliwe po wyjęciu z pudełka, by tak rzec, można to zrobić za pomocą iscroll
Tak, można użyć iScroll dla iOS i Android urządzeń mobilnych/tabletek i używać sposób obecnie robimy to na urządzenia stacjonarne.
iScroll ma kilka opcji dla funkcji wywołania zwrotnego nazywać pewnych wydarzeń - takich jak „onScrollMove”, „onBeforeScrollEnd”, „onTouchEnd”, itd. Niestety, nie ma opcji, aby wykonać zwrotnego na „każdej pozycji zmiany, w tym zmiany powodujące pęd przewijania po tym, jak użytkownik przestał dotykać ekranu ". Ale łatwo jest dodać jeden.
W źródle iScroll, wokół linii 127, w pobliżu "// Wydarzenia" komentarz, dodać nową zmienną:
onPosChange: null
Następnie wokół linii 308, na końcu funkcji "_pos" dodaj linię:
if (this.options.onPosChange) this.options.onPosChange.call();
(czyli po prostu wywołać funkcję przekazany w opcji „onPosChange”, jeśli istnieje).
Uczyniwszy to, następujący przykładowy kod utworzy iScroll dla div z id = „iscroll_container” i drukuje Y przesunięcie do konsoli za każdym razem, gdy zmiany:
var myScroll;
function loaded() {
myScroll = new iScroll('iscroll_container', { onPosChange: actOnScroll });
}
document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
//Use this for high compatibility (iDevice + Android)
document.addEventListener('DOMContentLoaded', function() { setTimeout(loaded, 200); }, false);
function actOnScroll(){
console.log('got a scroll move! Vert offset is: ' + myScroll.y);
}
Uwaga, Ben the Bodyguard Parallax Site działa na iPadzie przy użyciu iScroll (używają znacznie starszej wersji iscroll i nie robią tego dokładnie tak, jak opisałem tutaj)
Również, Life of Pi Parallax Site działa na iPadzie naprawdę ładnie - nie mogę się domyślić, w jaki sposób rób to, ale przynajmniej udowadnia, że to możliwe!
@tkalve samo w droid ... –
Próbowałem t on sam na http://www.hakoniemi.net/labs/onscroll.html i skończył z tą samą rozdzielczością: nie można śledzić elastycznego przewijania w systemie iOS. Nie ma dla niego żadnego detektora zdarzeń + oba limity czasu/interwały nie są wykonywane podczas przewijania. A ponieważ nie ma requestAnimationFrame w iOS5, wydaje się niemożliwe do rozwiązania. – zvona
Z pewnością nie oczekujesz, że rAF zostanie uruchomiony, jeśli interwał nie powiedzie się. Jest to jednak FWIW, możliwe jest uzyskanie aktualnego odczytu w narzędziach Safari Dev wyposażonych w gniazdo internetowe, podczas przewijania momentu. –