2016-03-11 17 views
14

Wyobraź sobie przewijany poziomo div, który zawiera dwa pionowo przesuwne elementy div.
Należy przewijać w poziomie, aby nawigować, a następnie przewijać w pionie w wewnętrznych elementach div, aby odczytać treść.Poziomo przewijany div, który zawiera pionowe przewijane div, nie będzie przewijany w poziomie na iOS.

/* MINIMAL RESET */ 
 
body, html { 
 
    height: 100%; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
* { box-sizing: border-box; }
<div style=" 
 
      overflow-x: scroll; 
 
      white-space: nowrap; 
 
      width: 100%; 
 
      height: 100%; 
 
      position: relative; 
 
      background-color: black; 
 
      "> 
 
    <div style=" 
 
       width: 100%; 
 
       height: 100%; 
 
       left: 0%; 
 
       top: 0px; 
 
       margin: 0px; 
 
       position: absolute; 
 
       display: inline-block; 
 
       background-color: green; 
 
       "> 
 
    <div style=" 
 
       width: 100%; 
 
       height: 100%; 
 
       overflow-y: scroll; 
 
       "> 
 
     <div style=" 
 
        width: 100%; 
 
        height: 200%; 
 
        "> 
 
     </div> 
 
    </div> 
 
    </div> 
 
    <div style=" 
 
       width: 100%; 
 
       height: 100%; 
 
       left: 100%; 
 
       top: 0px; 
 
       margin: 0px; 
 
       position: absolute; 
 
       display: inline-block; 
 
       background-color: blue; 
 
       "> 
 
    <div style=" 
 
       width: 100%; 
 
       height: 100%; 
 
       overflow-y: scroll; 
 
       "> 
 
     <div style=" 
 
        width: 100%; 
 
        height: 200%; 
 
        "> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

Po obejrzeniu this question zorientowali się, że można ustawić -webkit-overflow-scrolling : 'touch', ale w moim przypadku trzeba szukać innego rozwiązania, bo manipulować scroller poziomego podczas przewijania zostało zakończone i touch-scroll w tym przypadku go zepsuć.

Poniższy przykład działa dobrze w przeglądarce Chrome, także w Chrome na Androida, jednak w systemie iOS nie można przewijać w poziomie z uwagi na ostrość danych wejściowych, które zawsze są przesyłane do pionowych przewijarek.

Jak ustawić przewijanie poziome i pionowe dla iOS, aby działał tak samo, jak w Chrome?

+0

Próbowałeś coś takiego [to] (http://patrickmuff.ch/blog/2014/10/01/how-we- naprawiono-przepełnienie-przewijanie-przewijanie-dotknięcie-błąd-na-ios /)? –

+0

Mówisz, że "manipulujesz poziomym wałkiem po zakończeniu przewijania, a touch-scroll w tym przypadku go rozwiąże", a także wspomina o "fokucie wejścia". Czy możesz pokazać oba te elementy, edytując swój [minimalny, pełny i weryfikowalny przykład] (http://stackoverflow.com/help/mcve)? – gfullam

+0

Cóż, było mniej kodu, zanim go edytowałeś ... Ale! Mam na myśli, manipulując, że muszę zmienić pozycję przewijania po zakończeniu przewijania przez użytkownika. –

Odpowiedz

1

Wydaje mi się, że lepiej byłoby zająć się podejściem do karuzeli, w którym przesuwałbyś pojemnik podczas przesuwania, zamiast używać "natywnego" zachowania przewijania.

W ten sposób będziesz mógł przesuwać swoje DIV w lewo i prawo za pomocą JS oraz przewijać w górę iw dół za pomocą zwykłego przewijania.

1

trzeba wymienić cały overflow-*AXIS* do prostego overflowauto:

<div style="overflow: auto; white-space: nowrap; width: 100%; height: 100%; position: relative; background-color: black;"> 
    <div style="width: 100%; height: 100%; left: 0%; top: 0px; margin: 0px; position: absolute; display: inline-block; background-color: green;"> 
     <div style="width: 100%; height: 100%; overflow: auto;"> 
      <div style="width: 100%; height: 200%;"></div> 
     </div> 
    </div> 
    <div style="width: 100%; height: 100%; left: 100%; top: 0px; margin: 0px; position: absolute; display: inline-block; background-color: blue;"> 
     <div style="width: 100%; height: 100%; overflow: auto;"> 
      <div style="width: 100%; height: 200%;"></div> 
     </div> 
    </div> 
    </div>