2011-11-12 13 views
18

W Safari iOS, przesuwanie jednym palcem nie generuje żadnych zdarzeń, dopóki użytkownik nie przestanie przesuwać. Zdarzenie onscroll jest generowane tylko wtedy, gdy strona przestaje się poruszać i przerysowywać.Tworzenie "przyklejonej" pozycji o ustalonej pozycji działającej w Safari na iOS

Potrzebuję sposobu na wykrycie przewijania w czasie rzeczywistym. W szczególności chcę stworzyć lepkie menu, które będzie działać również na iOS safari. W przeglądarkach innych niż mobilne, lepkie menu można zrobić, przełączając się pomiędzy "pozycją względną" i "pozycją ustaloną" na elemencie podczas słuchania zdarzeń onscroll. Ta metoda nie działa w przeglądarce mobilnej, ponieważ zdarzenia onscroll nie są uruchamiane w sposób ciągły. Co mogę zrobić?

+0

Jednym (choć hackerskim) sposobem na jego wdrożenie może być rozpoznanie własnego pionowego gestu Pan i dodanie go do widoku internetowego. W ten sposób można użyć właściwości -state do odbierania zdarzeń. – CodaFi

+2

Przywiązanie do ruchu dotykowego i monitorowanie wartości strony – sciritai

Odpowiedz

0

Jeśli wszystko, czego chcesz, to lepkie menu, możesz zaoszczędzić sobie bólu głowy, używając istniejącej biblioteki. Miałem sukcesu z iScroll:

http://cubiq.org/iscroll

Przynajmniej można przyjrzeć się, jak to działa i oprzeć swoje rozwiązanie wokół tego.

Happy hacking!

-3

Stary temat na pewno, ale widzę tu wiele wizyt. Jeśli chcesz, to jest lepkie menu, możesz użyć stałego pozycjonowania. Nie potrzebujesz tam iScroll.

+0

Należy podkreślić, że ustalone pozycjonowanie nie jest obsługiwane w wielu przeglądarkach mobilnych. Więcej tutaj: http://bradfrostweb.com/blog/mobile/fixed-position/ –

+1

Należy podkreślić, że osoba zadająca pytanie, znalazła rozwiązanie z dużo mniejszym wsparciem niż moje rozwiązanie ... i nie zgadzam się z twoje oświadczenie o wsparciu stanowiska: poprawiono: http://caniuse.com/css-fixed –

+1

Z czym nie można się zgodzić? "Częściowe wsparcie w Safari na iOS odnosi się do błędnego zachowania." Czy zachowanie błędów w ~ 50% przeglądarek mobilnych jest dla ciebie akceptowalne? –

3

Ostatnio wiele godzin spędziłem na próbach znalezienia praktycznego rozwiązania tego samego problemu. Nie ma sposobu, aby to zrobić, chociaż istnieje kilka przyzwoitych hacków (większość z nich już wspomniano). Problem polega na tym, że JavaScript jest wstrzymywany, gdy użytkownik przewija. Ma to sens, gdy bierze się pod uwagę implikacje, ale sprawia, że ​​trudno jest zaimplementować stały element pozycjonowany.

Najlepszą rzeczą, jaką udało mi się znaleźć, jest ten wspaniały post od ludzi z Google. W mobilnym safari możesz sprawdzić, czy nie jest to http://gmail.com.

https://developers.google.com/mobile/articles/webapp_fixed_ui

Nadzieja to pomaga.

+1

Ten link przekierowuje na stronę główną programistów. Najlepsze, co mogłem znaleźć, to archiwum.org: https://web.archive.org/web/20141001100814/https://developers.google.com/mobile/articles/webapp_fixed_ui – duncan

2

Miałem podobny problem i związane procedury obsługi do touchstart/touchmove/touchend przy użyciu jquery, aby wykryć przewijanie jednym palcem i działało idealnie. W moim przypadku musiałem przesunąć kolejny element o taką samą ilość, jak próba przeniesienia innego elementu i ładnie się zaktualizował, tak jak próbował przewijać, więc powinien być odpowiedni do twoich wymagań.

Powiązane problemy