2014-09-29 117 views
2

我有一個主要爲iPhone用戶構建的Bootstrap主題的Angular網站,自IOS8更新以來,我發現與滾動有關的問題。該網站表現良好,直到我滾動,一旦我滾動的鏈接行爲不正常,例如,如果我按下按鈕2,從按鈕1的鏈接將打開。另外一些CSS3樣式不起作用,例如:nth-child(even)我已經搜索了幾天,試圖找到此行爲和滾動錯誤之間的鏈接,但我無法在任何地方找到修復。不幸的是我不能發佈的網站鏈接,但它由一個固定的頁眉和頁腳,和一個div設置爲overflow: auto;任何幫助是極大的讚賞:)IOS8 Safari網站鏈接滾動後不工作

NB的:我在滾動的元素使用多個手風琴與

樣式可滾動元件

.scrollable { 
     overflow: auto; 
     -webkit-overflow-scrolling: touch; 
     position: absolute; 
     top: 47px; 
     bottom: 0px; 
     left: 0px; 
     right: 0px; 
    } 

更新:我從IOS模擬器添加的圖像來說明這個問題。我使用Inspect Element在滾動後突出顯示Anchor標籤的位置。這就像Safari在滾動後不重置位置。

enter image description here

更新:我認爲這個問題是關係到其使用position: fixed;定位成我一直沒能尚未證實這一點,但它看起來像問題的根源頁腳。

+0

我經歷過同樣的問題,但無法找到一個解決:(汞和鉻似乎做工精細,我不得不求助於到用戶代理嗅探並在我的網站頂部顯示橫幅,要求我的用戶切換瀏覽器,直到Apple發佈修復程序 – 2014-09-30 17:55:57

+0

我們一直有類似的問題,但是我一直無法縮小可複製的測試用例沒有整個代碼庫如果你不介意我問,你可以發佈你正在使用的HTML + CSS嗎? – jsherer 2014-09-30 19:10:22

+0

@ user1是的,這是令人痛心的,在此期間我建議我們的用戶改變瀏覽器 – 2014-09-30 20:05:36

回答

1

工作中的開發人員設法通過消除頁面之間的轉換來解決此問題。看到他在下面註釋的代碼。它在controllers.js中找到。希望這個例子能幫助你在你的項目中找到轉換代碼。

$scope.slide = ''; 
$rootScope.back = function() { 

//$scope.slide = 'slide-right'; 
$window.history.back(); 
} 
$rootScope.go = function(path){ 
//$scope.navLeft = false; 
//$scope.navRight = false; 
//$scope.slide = 'slide-left'; 
$location.url(path); 
} 
+0

投了票,但它並沒有爲我工作,最終我的解決方案也沒有。我的網站只能在IOS8下運行,如果你觸摸屏幕並滾動一點點就可以運行,但是當你加載它時不起作用,當你重新加載它時不起作用。 – Christina 2014-10-11 21:42:40

+0

我的問題是該網站在您滾動時開始行爲怪異。 IOS8正在投擲一些曲線球。你有我可以檢查出的鏈接嗎? – 2014-10-13 19:35:19

+0

我在想,它會解決最新的IOS更新,所以我沒有修復,除非它不是固定的。一旦我把它放在一起,我會發送一個鏈接。你是否更新到最新的8.0.2(是否有修復?) – Christina 2014-10-13 19:43:52

4

我們有類似的問題。 基於可重複觀測的分析結果: 觸摸的垂直位置未正確傳遞給Safari,即如果您在x/y位置100/200觸摸屏幕,位置100/300將傳遞給瀏覽器。您觸碰屏幕的頻率越高,這個Delta值越大越大。如果您在不同行中有一系列元素,則可以觀察到最佳效果。在開始時你點擊第1行,第1行被激活。稍後點擊第2行,第1行被激活,然後第3行第4行,直到觸摸最底行,然後通過的y座標甚至高於0位置。 前查看用戶的解決方法爲我們的網站,請注意,我們有一個旋轉的變化下面的事件處理:

function doOnOrientationChange() 
 
{ 
 
    switch(window.orientation) 
 
    { 
 
    case -90: 
 
    case 90: 
 
\t \t viewport = document.querySelector("meta[name=viewport]"); 
 
\t \t viewport.setAttribute('content', 'initial-scale=0.9,width=device-width'); 
 
     break; 
 
    default: 
 
\t \t viewport = document.querySelector("meta[name=viewport]"); 
 
\t \t viewport.setAttribute('content', 'initial-scale=0.75,width=device-width'); 
 
     break; 
 
    } 
 
}

用戶的解決辦法:

  • 放大進出。這解決了問題,直到頁面被更改或關閉標籤
  • 或者:改變旋轉爲縱向和背部

如果我添加用戶可擴展性=無到視圖端口的設置,這個問題不會出現在所有:

function doOnOrientationChange() 
 
{ 
 
    switch(window.orientation) 
 
    { 
 
    case -90: 
 
    case 90: 
 
\t \t viewport = document.querySelector("meta[name=viewport]"); 
 
\t \t viewport.setAttribute('content', 'initial-scale=0.9,width=device-width,user-scalable=no'); 
 
     break; 
 
    default: 
 
\t \t viewport = document.querySelector("meta[name=viewport]"); 
 
\t \t viewport.setAttribute('content', 'initial-scale=0.75,width=device-width,user-scalable=no'); 
 
     break; 
 
    } 
 
}

但是,這不是我們的一個解決方案。實際上,我們在iOS7發佈後添加了這個設置。這只是iOS7錯誤的解決方法。後來我們找到了另一種解決方法,我們可以刪除這個限制。 現在釋放iOS8後,我有一種dejavú,因爲我們可以添加相同的設置,這次是iOS8中的一個bug的解決方法。 但幸運的是還有另一種解決方法,對我們來說工作正常。在頁面加載後直接,下面是推出由用戶並在模擬變焦:

function ios8BugFixPart1() { 
 
    // zoom out 
 
    switch(window.orientation) 
 
    { 
 
    case -90: 
 
    case 90: 
 
\t \t viewport = document.querySelector("meta[name=viewport]"); 
 
\t \t viewport.setAttribute('content', 'initial-scale=0.8,width=device-width'); 
 
     break; 
 
    default: 
 
\t \t viewport = document.querySelector("meta[name=viewport]"); 
 
\t \t viewport.setAttribute('content', 'initial-scale=0.70,width=device-width'); 
 
     break; 
 
    } 
 
\t setTimeout(ios8BugFixPart2, 200); 
 
} 
 
function ios8BugFixPart2() { 
 
    // zoom in 
 
    switch(window.orientation) 
 
    { 
 
    case -90: 
 
    case 90: 
 
\t \t viewport = document.querySelector("meta[name=viewport]"); 
 
\t \t viewport.setAttribute('content', 'initial-scale=0.9,width=device-width'); 
 
     break; 
 
    default: 
 
\t \t viewport = document.querySelector("meta[name=viewport]"); 
 
\t \t viewport.setAttribute('content', 'initial-scale=0.75,width=device-width'); 
 
     break; 
 
    } 
 
} 
 
setTimeout(ios8BugFixPart1, 1000);

我希望這會幫助你們中的一些爲好。

PS:是否有任何可能阻止庫比蒂諾傢伙推出新的操作系統版本,即使這一次的變化太小了?

+0

我要試試這個!非常感謝你分享我真的厭倦了蟲蛀 – Christina 2014-10-14 02:51:24

+0

它的工作原理我很開心!感謝上千遍! – Christina 2014-10-14 03:00:44

+0

有沒有反正它可以上到頂?現在它從上往下裝載大約100px的頁面 – Christina 2014-10-14 03:13:41

2

這是最終爲我工作的,奇怪的,因爲它是:

$(window).load(function() { 
    var deviceAgent = navigator.userAgent.toLowerCase(); 
    var agentID = deviceAgent.match(/(iphone|ipod|ipad)/); 
    if (agentID) { 

    setTimeout(function(){ 
     window.scrollTo(1, 1); 
    }, 100); 

    // http://davidwalsh.name/hide-address-bar 
} 

});