2012-07-06 45 views
24

從2.2開始,Android瀏覽器支持固定位置,至少在某些情況下(例如關閉縮放時)。我有一個沒有JS的簡單HTML文件,但是我嘗試過的三款三星手機的固定位置根本不對。標題不是真正的固定位置,而是滾動出視圖,然後在滾動完成後彈出回原位。在三星Android瀏覽器上啓用真正的固定位置

對於我測試過的任何配置(2.2,2.3,2.3 x86,4.0.4),這不會發生在Android SDK模擬器上。在三星手機上的應用程序中使用WebView時也不會發生這種情況:在這些情況下,定位按預期工作。

有沒有辦法讓三星Android「股票」瀏覽器使用真正的固定定位?

我測試: 1.三星Galaxy 551,機器人2.2 2.三星Galaxy S,機器人2.3 3.三星Galaxy S II,機器人2.3

樣品的編號:

<html> 
    <head> 
    <meta name="viewport" content="initial-scale=1.0,maximum-scale=1.0,user-scalable=no,width=device-width,height=device-height"> 
    <style> 
    h1 { position: fixed; top: 0; left: 0; height: 32px; background-color: #CDCDCD; color: black; font-size: 32px; line-height: 32px; padding: 2px; width: 100%; margin: 0;} 
    p { margin-top: 36px; } 
    </style> 
    </head> 
    <body> 
    <h1>Header</h1> 
    <p>Long text goes here</p> 
    </body> 
</html> 

預期的行爲是灰色標題填充屏幕的頂部,並保持放置,無論您滾動多少。在三星Android瀏覽器中,它似乎可以滾動查看,然後在滾動完成後彈出回到原位,就好像使用Javascript模擬了固定定位一樣,事實並非如此。

編輯 通過評論和「答案」來判斷,似乎我可能並不清楚自己需要什麼。我正在尋找一個meta標籤或css規則/ hack或javascript開關,關閉三星的固定定位並打開Android瀏覽器的固定定位。我不是在尋找一種Javascript解決方案,它將破碎的固定位置添加到沒有任何支持的瀏覽器中;三星固定定位已經做到了,它看起來很愚蠢。

+0

你有一個參考「的Android瀏覽器,因爲2.2,支持固定定位」? – deefour 2012-07-09 14:47:58

+0

@Deefour SDK中的Android模擬器證實了這一點,就像我在文章中提到的那樣。 – 2012-07-09 15:01:34

+0

[caniuse](http://caniuse.com/css-fixed)表示<3.0只有部分支持,[參考文章](http://bradfrostweb.com/blog/mobile/fixed-position/)表示「一旦滾動完成,Android 2.2笨拙地將固定元素捕捉到位。」只是尋找確認您在SDK中看到的東西的預期行爲,至少在Galaxy 551(2.2版本)中看來,您正在經歷上述引用文章所描述的確切行爲。 – deefour 2012-07-09 15:49:20

回答

1

也許你可以考慮不同的方法,它不需要固定的定位...

添加滾動到段落元素,而不是(默認)body元素。然後,您可以將該段落元素放在標題下方。這將確保標題始終顯示在頁面的頂部,並允許您滾動段落中的文本。

h1 { 
    height: 20px; 
} 

p { 
    position: absolute; 
    top: 20px; 
    left: 0px; 
    right: 0px; 
    bottom: 0px; 
    overflow-y: auto; 
} 
+2

這可能會起作用。但是,我聽說滾動文檔的一部分而不是整個文檔時,滾動性能要慢很多。無論如何,我使用的是jQuery Mobile,所以我在文檔結構上沒有太大的靈活性。 – 2012-08-08 17:59:06

-2

這不是三星的Android瀏覽器壞了,它的Android 2.2具有破碎支持。 一般情況下,您可能已經知道位置:在許多移動設備/系統中,固定是,有些情況下仍然非常糟糕。

要回答你的問題,沒有「開關或元標記」,將「打開Android瀏覽器的工作固定位置」。如果瀏覽器不支持某些東西,那麼沒有「切換」來「切換」它。這不是一個功能。

否則,您可以使用http://cubiq.org/iscroll-4模擬它。

(編輯:一些事實)

  1. 根據http://caniuse.com/#search=position:fixed的Android 2.2和Android 2.3有局部的和不完全支持的立場:固定的。 (部分支持看起來是越野車支持)
  2. Android模擬器不是也將永遠不會與Android本地瀏覽器相同,就像IETester例如與IE本機不一樣(存在差異)
  3. Motorola ATRIX 4G沒有的Android 2.2,但Android 2.3的(http://www.motorola.com/us/consumers/MOTOROLA-ATRIX%E2%84%A2-4G/72112,en_US,pd.html?selectedTab=tab-2&cgid=mobile-phones#tab

你暗示三星推出的專用黑客或打破固定在Android瀏覽器的位置,否則工作的支持MOD。這似乎不太可能,不管以上三點。

答案其實很簡單:支持部分(多錯誤),您唯一的解決方案是使用替換或「修復」漏洞的JavaScript庫。

+0

錯了。我在模擬器和摩托羅拉Atrix 4G上的Stock Android 2.2上工作。在Nexus S和Android模擬器上使用Android 2.3。它只在具有三星修改的手機上失敗。 – 2012-10-09 14:13:40

+0

我編輯我的帖子,添加一些事實只是爲了讓事情直接在一些東西。 – 2012-10-09 14:37:42

+0

你可以否認Atrix 4G有2.3,但是我把它拿在手裏,它顯然是2.2。此外,Android模擬器正在運行Stock Android瀏覽器。它不是某種模擬器:它模擬包括處理器在內的整個機器。這是真正的硬件。 caniuse.com是一個很好的文檔來源,但實際的Android代碼是真實的文檔。 Google以工作形式發佈它,但是在每個SAMSUNG手機(即運行TouchWiz的手機)上都已損壞。我不知道你爲什麼用我的實驗結果爭論。 – 2012-10-09 16:00:33

相關問題