2011-10-19 16 views
24

Używam Twitter Bootstrap do stylizowania witryny zoptymalizowanej pod kątem tabletów iPad i mam do czynienia z ciekawym błędem w Mobile Safari na iOS5.Stała pozycja navbar tylko raz klikalna w Mobile Safari na iOS5

Po dotknięciu linku zakotwiczenia w pasku nawigacji o ustalonej pozycji, poprawnie prowadzi mnie do tej kotwicy. Nie mogę jednak kliknąć na żadne inne linki na pasku nawigacyjnym, dopóki nie przewiną stronę.

Problem pojawia się w samej Bootstrap, ponieważ strona Bootstrap ma ten sam problem: http://twitter.github.com/bootstrap/

jakieś sugestie jak to obejść?


Poniższy kod powtarza problem. Uwaga: jeśli klikniesz "Test JS" lub "Test jQuery" (dwa różne typy przewijania, proste JS lub oparte na jQuery), nie będziesz mógł kliknąć ponownie, dopóki ręcznie nie przeniesiesz strony.

Oto podstawowy kod demo (.jsp):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
    <head> 
     <style type="text/css"> 
      #testDiv { 
       position: fixed; 
       bottom: 0; 
       right: 0; 
       background: gray; 
       padding: 20px; 
      } 
      #jsDiv, 
      #jQueryDiv { 
       width: 200px; 
       display: block; 
       height: 40px; 
       background-color: red; 
      } 
      #jQueryDiv { 
       background-color: yellow; 
      } 
     </style> 
     <script type="text/javascript"> 
      function testScroll() { 
       alert("JS"); 
       scroll(0, 5000); 
      } 
      function testjqScroll() { 
       alert("JQuery"); 
       $(window).scrollTop(500); 
      } 
     </script> 
     <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.js"></script> 
    </head> 
<body> 
    <%for (int i = 0; i < 500; i++) {%> 
    Line <%=i%><BR/> 
    <%}%> 
    Bottom 
    <div id=testDiv> 
     <a id="jsDiv" href="#" onclick="testScroll();return false;">Test JS</a> 
     <a id="jQueryDiv" href="#" onclick="testjqScroll();return false;">Test jQuery</a> 
    </div> 
</body> 
</html> 
+1

Mam ten sam problem. Dotychczas brak rozwiązania. – Stuiterbal

+0

Mam podobny problem. Ktoś? – emilolsson

Odpowiedz

-2

miałem ten sam problem. Musisz zastosować padding-top co najmniej 40px na swoim tagu <body> lub dowolnym elemencie tuż przed twoją kreską (navbar lub topbar).

33

Czuję twój ból. Spędziłem co najmniej 6 godzin próbując to wymyślić. Ale zrobiłem, przynajmniej słodkie rozwiązanie, które zadziałało dla mnie.

Mam stały nagłówek z nawigacją w nim tak wiele nagłówków. Ciało/html przewija się pod nim. (typowy)

Po kliknięciu przycisku nawigacji strona przewija i skutecznie zabija moje guziki, dopóki fizycznie nie przewiniemy mojego ciała ponownie palcem. To w jakiś sposób sprawia, że ​​moje przyciski znów się klikają. Próbowałem wszystkiego i nikt chyba nie rozwiązał tego problemu lub nie podzielił się wynikami.

html :: Pod koniec mojego kontenera div, dodałem pusty div, bez wysokość/szerokość

<div id="device"></div> 

</div> <!--! end of #container --> 

js :: Tuż przed animacji przewijania, daję wysokość div wynosząca 200 pikseli.

$('#device').css('height', '200px');

natychmiast pełna animacji, biorę wysokość dala

$('#device').css('height', '0px');

to jest to. Słodka magia hack. Mam nadzieję że to pomogło. Jeśli chcesz działający przykład, http://ryanore.com Obecnie jestem w trakcie, więc normalnie nie będę prowadzić żadnych linków do niego, ale hej, to jest dla dobrej sprawy.

+1

Należy zauważyć, że ta liczba "200px" była arbitralna i wydawało się, że działa dobrze w mojej sytuacji. Być może będziesz musiał skrzypce z wartością, dopóki nie ułożysz czegoś, co działa. –

+0

FWIW, to nie działa dla mnie. Taki denerwujący błąd! – weotch

+0

Pracowałem dla mnie, najlepiej jak tam. Dzięki! – Mac

2

Istnieje rozwiązanie tutaj: http://xybrary.appspot.com/.

Nie twierdzę, że to najlepszy produkt, ale nie udało się znaleźć czegoś lepszego. Wypróbowałem rozwiązanie @Ryan Ore, odwiedzając jego stronę na iOS 5.1, a jego problem nie został naprawiony.

Zasadniczo utworzono dwa stałe navbary, pierwszy o ustalonej pozycji i większym indeksie Z, drugi o absolutnej pozycji i niższym indeksie z (oczywiście inna klasa CSS). Tak więc oryginał i duplikat są ułożone jeden na drugim.

+0

Cieszę się, że napisałeś to w rzeczywistości, nie jestem pewien, dlaczego moje też nie działa. Myślę, że mogłem nieumyślnie zgubić mój kod. Wiem, że działało świetnie przez jakiś czas. złoży raport. –

+0

Tak, faktycznie wygrałem mój CSS i teraz znowu działa. Nie wiem, dlaczego to nie działa, ale cieszę się, że znalazłeś inne rozwiązanie. Nie próbowałem tego, ale hej, jeśli to działa, to jest niesamowite. –

+0

Dzięki za powiadomienie nas o @Ryan Ore Jestem pewien, że ludzie mogą teraz studiować swoje podejście i zrobić to, będę wyglądać tak samo, jak jestem ciekawy. – Chris