2013-04-19 9 views
7

Czy można wymusić zatrzymanie pędu przewijanie na iphone/ipad w javascript?force-stop rozpędu przewijanie na iphone/ipad w javascript

Dodatkowo: jestem pewien, że to jest ciasto na niebie, ale w przypadku bonuspointów (honor i kudos), po manipulacji domem i użyciu scrollTo, wznów przewinięcie z tym samym pędem przed wymuszonym zatrzymaniem. Jak?

+2

próbowałeś ustawiając pozycję przewijania oraz wyłączenie przepełnienie na ciele/html? Wznowienie przewijania może być również możliwe, spójrz na zdarzenia przewijania przed zatrzymaniem i obliczyć "dy". Będziesz musiał jednak uzyskać dobre oszacowanie wartości _friction_ (jak szybko zwalnia). – Halcyon

+0

Jeśli mam pytanie poprawnie, myślę, że odpowiedziałem tutaj: [Programatically halt -webkit-overflow-scrolling] (http://stackoverflow.com/questions/14770891/programatically-halt-webkit-overflow-scrolling/14771980#14771980) – insertusernamehere

+0

OK, chłopaki, dziękuję. Spróbujcie przekonać się, jak ważne jest zdobycie ostatniego "dy" i wyjście z tego miejsca. –

Odpowiedz

7

Jest to bardzo możliwe w przypadku korzystania z fastclick.js. Biblioteka usuwa opóźnienie kliknięcia 300ms na urządzeniach mobilnych i umożliwia przechwytywanie zdarzeń podczas przewijania bezwładności/pędu.

Po tym fastclick i dołączenie go do elementu nadwozia, mój kod, aby zatrzymać przewijanie i iść do góry wygląda następująco:

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

Sztuką jest ustawiony overflow: hidden, który zatrzymuje bezwładność/tempa przewijanie . Proszę zobaczyć moje skrzypce dla pełnej implementacji stop scrolling during inertia/momentum.

+5

Resetowanie przepełnienia do ukrytego, a następnie powrót do automatycznego lub przewijania to solidne rozwiązanie bez użycia fastclick.js. Tylko nie zapomnij o przekroczeniu limitu czasu! – abriggs

+0

Jest to pierwsza odpowiedź, którą uznałem za prostą i działającą w różnych przeglądarkach. Zauważ, że 'timeOut' nie może być ustawione na' 0' –

0

Tu jest mój kod za pomocą animacji jQuery (działający jako zdarzenie onclick)

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

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

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

} 

testowany na iPhone 6

Powiązane problemy