2016-02-11 15 views
13

Mam bardzo denerwujący problem tylko w iOS Safari 9+ (8.4 jest w porządku) gdzie, gdy użytkownik szybko przewija stronę w wyniku czego linki kotwiące w stałych elementach nie będą już klikalne z powodu wyglądu i faktycznego obszaru kliknięcia/trafienia, który nie będzie układał się w swoim elemencie, dopóki użytkownik nie przewinie ponownie.Naprawione elementy nie są klikalne, gdy szybko przewiń do dołu w iOS Safari 9+

Nie dzieje się tak samo za każdym razem i może zająć kilka prób "zerwania" systemu. Treść musi być dłuższa niż rzutnia, aby to działało.

iOS 9+ Safari Fixed:Position Scroll Issue Screen Recording

Brak obejścia tego problemu jeszcze. Jak mogę rozwiązać ten problem?

AKTUALIZACJA: Po dalszych testach problem dotyczy tylko iOS Safari 9 i nowszych, przetestowanych na iOS 8 i nie ma problemu.

UPDATE 2: Jest teraz jasne, że to się dzieje w przypadku większości stron internetowych wykorzystujących position:fixed; a nawet position:-webkit-sticky;. może chcesz sprawdzić swoje :)

HTML

<section> 
    <article></article> 
    <article></article> 
    <article></article> 
</section> 

<div class="sticky"> 
    <a href=""></a> 
</div> 

CSS:

html, body { 
    margin:0; 
} 

article { 
    display: block; 
    height: 200px; 
    width: 100%; 
    margin-bottom: 20px; 
    background: whitesmoke; 
} 

.sticky { 
    width:100%; 
    height:100px; 
    position: fixed; 
    bottom:0; 
    background: orange; 
    text-align:center; 

} 

.sticky a { 
    display: inline-block; 
    width: 100px; 
    height: 100px; 
    background: yellow; 
} 

http://codepen.io/toobulo/pen/dGEodo

Emisja nie nastąpi w ciągu edytorze Codepen, jak to związane z ruchomymi zmianami rozmiaru paska narzędzi/przeglądarki Safari. Proszę eksportować kod na własnej stronie lub skorzystaj z poniższego linku:

https://cdn.rawgit.com/anonymous/3234ad797dd80e5f8905/raw/ab51c4d8621cfb827f83a33d21940579f8682cde/index.html

Odpowiedz

4

Ten problem jest związany z efektem odrzuceń w iOS i utraty pasek & pasku nagłówka. Jedynym sposobem, że znalazłem to naprawić to, aby wykonać następujące czynności:

html, 
body { 
    height: 100%; 
    width: 100%; 
    overflow: auto; 
    -webkit-overflow-scrolling: auto 
} 

Można to zrobić na przerwania, jak również tak, że działa tylko na telefonie komórkowym. Mam nadzieję że to pomoże.

** Dodano przewijanie z przepełnieniem.

+0

Chociaż to rozwiązanie rozwiązuje problem, otwiera nową puszkę Pandory dla różnych dziedzinach, takich jak JavaScript calculations- np 'var zwój = $ (okno) .scrollTop(); if (scroll> = 10) {// zrób coś} ' – Joe

+0

@Joe Powinieneś uwzględnić to jako część wymagań pytania, a następnie –

+1

@ZachSaucier Nie chciałam przepełnić pytania nowymi wymaganiami wynikającymi z różnych sugerowanych poprawek mając nadzieję, że zachowanie zostanie rozwiązane w najprostszej formie (bez problemów związanych z JS), dlatego mój komentarz pasuje do tej odpowiedzi, nie? – Joe

-1

Możesz dokonać linku bezwzględnego .sticky a i zastosować poniższe CSS, aby link był niezależny od okna/przeglądarki.

.sticky { 
    width: 50px; 
} 
.sticky a { 
    position: absolute; 
    top: 0; 
    bottom: 0; 
    margin: auto; 
} 
+0

To nie pomaga, ponieważ potrzebuję Naprawiono pozycjonowanie względem rzutni - a nie wysokość dokumentu. Dzięki rozwiązaniu div będzie przewijane długą stroną. – Joe

+1

OK, a następnie możesz spróbować wyliczyć (var1) = (wysokość ekranu) i (var2) = (dolne położenie dolnej części ekranu) na każdym przewijaniu przy użyciu ** funkcji zmiany rozmiaru (z jQuery) ** i obliczyć: (środkowy punkt) = (var2 - (var1)/2). Mam nadzieję, że to dostałeś. Następnie możesz dynamicznie ustawić pozycję bloku na ** mid_point **. –

+0

Dzięki, chociaż byłoby miło rozwiązać za pomocą Position: Fixed; i bez dodatkowych JS, doceniam twoją pomoc i spróbuję tego w ostateczności. :) – Joe

Powiązane problemy