2017-06-05 137 views
0

我正在一個角度的Web應用程序,有一個主導航欄和幾個視圖,每個都有自己的子導航欄。iOS動量滾動滾動div與固定定位子元素

每個視圖都保存在一個可滾動的div內,並且在任何給定時間只有一個div可見。

這些視圖使用'will-change'CSS屬性進行硬件加速,並且使用-webkit-overflow-scrolling CSS屬性啓用動量滾動。

在每個這些DIV中都有一個固定位於主導航欄之後的子導航欄。

一切都按預期工作,除了一個令人討厭的小故障,在iPad/iPhone的子導航不斷反彈,然後進入其位置。

Here's a pen說明問題。請注意這些故障對黃子菜單,滾動時的iPad/iPhone ...

HTML:

<html> 
    <head> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> 
    </head> 
    <body> 
    <div class="main_header"> 
     MAIN MENU 
    </div> 
    <div class="views-container"> 
     <div class="view"> 
     <div class="view-header test"> 
      SUB MENU 
     </div> 
     <div> 
      CONTENT 
     </div> 
     </div> 
    </div> 
    </body> 
</html> 

CSS:

html, body { 
    overflow-x: hidden; 
    overflow-y: hidden; 
    height: 100%; 
} 

.main_header { 
    background-color:green; 
    position: fixed; 
    top:0px; 
    left: 0px; 
    width: 100%; 
    opacity: 0.9; 
} 

.views-container { 
    position: fixed; 
    top: 18px; 
    bottom: 0px; 
    left: 0px; 
    right: 0px; 
} 

.view { 
    position: absolute; 
    width: 100%; 
    height: 100%; 
    overflow-x: hidden; 
    overflow-y: scroll; 
    -webkit-overflow-scrolling: touch; 
    will-change: opacity; 
} 

.view-header { 
    background-color:yellow; 
    position: fixed; 
    width: 100%; 
    opacity: 0.9; 
    z-index: 1000; 
} 

我已經沖刷網頁中搜索一解決方案,但迄今爲止沒有提出任何建議 想法?

回答

1

(見codepen解決答案的底部)

測試在我的iPhone,我能得到的子菜單,不更改行動起來:

<body> 
    <div class="main_header"> 
     MAIN MENU 
    </div> 
    <div class="views-container"> 
     <div class="view"> <-- move this div below "view-header test" 
     <div class="view-header test"> 
      SUB MENU 
     </div> 
     <div class="container-fluid"> 

到:

<body> 
    <div class="main_header"> 
     MAIN MENU 
    </div> 
    <div class="views-container"> 
     <div class="view-header test"> 
      SUB MENU 
     </div> 
     <div class="view"> <-- move to here 
     <div class="container-fluid"> 

看起來像view類的CSS會導致子菜單嘗試在iPhone和iPad上滾動。

讓我知道,如果這個工程的

編輯:

另一個解決方案是浪費時間與CSS。基本上你的.view類包含你的.view頭類,因此.view-header的內容也將受.view類的影響。一種解決方案可能是製作一個.view-body類,在其中放置與不希望影響頭的視圖正文相關的任何代碼。然後做

<div class="view"> 
    <div class="view-header"> 
     header content. probably does not need to be scroll-able 
    </div> 
    <div class="view-body"> 
     body content. probably needs to be scroll-able 
    </div 
</div> 

DOUBLE編輯:

分叉的代碼並提出我推薦的變化。它現在在我的iPhone上完美運行。希望這可以幫助! https://codepen.io/anon/pen/RgWOGx

+0

第一個解決方案是無關緊要的,因爲view-header是動態的,必須包含在視圖中。第二種解決方案的外觀和功能非常好,不幸的是我在這裏提供了我的案例的簡化版本,所以併入這樣的改變並不是那麼容易,但我會試一試,因爲它似乎是唯一可行的解​​決方案。謝謝! –