2013-10-04 73 views
3

我正在測試一些滾動事件,並注意到在iOS 7 Mobile Safari中鍵盤上觸發了滾動事件,但沒有在鍵盤上關閉/關閉。我想知道是否有人知道這是爲什麼?iOS 7問題移動Safari滾動鍵盤上的滾動事件

我個人認爲這是一個錯誤(並且正在嘗試報告它,但目前無法登錄到錯誤跟蹤器),並且他們應該選擇在兩個鍵盤上向上和向下滾動滾動事件,或者選擇不要拋棄它們,因爲看起來視圖返回到它之前的狀態。

爲了演示這個問題,我創建了這個小站點,您可以在其中單擊輸入框並查看滾動事件在鍵盤上觸發,但在鍵盤菜單上按下完成時觸發並且屏幕滾動到它的初始位置。我添加了一個可掃描的qr代碼,可以將您發送到下面的測試網址。提前致謝!

測試網址:http://lp.mydas.mobi/test/cs/scroll_issue/error.html

TEST QR:QR URL Code

+0

iOS7是有史以來最笨的瀏覽器。我認爲他們應該把它推回 –

+0

好吧...讓我們不要在這裏被帶走,那裏有ie 6依然漂浮在...:p – shibbybird

+0

哦,我甚至想起它:p –

回答

1

您是否使用PhoneGap的還是什麼? 如果您在iscoll.js中使用phonegap,那麼只需在設備中鍵盤事件觸發時刷新您的滾動條即可。

這裏是鏈接鍵盤事件: keyboard event

和關閉鍵盤上,你只需要調用此代碼:

window.scrollTo(0, 0); 
+0

這是沒有Phonegap。純JS。 – changelog

+0

是的,這是純js – Anup

7

就遇到了這個問題,在PhoneGap的應用程序中的其他日子,但這種行爲似乎也與新的Safari一致。

盡我所知,新的Safari會在鍵盤啓動時調整報告給網頁的視口。我有一個高度爲100%的頁面和一個絕對位於頁面底部的導航欄。當鍵盤出現時,導航就隨之而來。令人煩惱的是,這導致我的輸入字段中的2個失去焦點,隱藏它們並使其無法完成登錄!

以前,我使用可以避免高度=設備高度在視窗meta標籤,因爲舊的Safari似乎並不瞭解關於狀態欄什麼,以及報告的設備,高度爲20像素總是太高,導致20px滾動以查看頁面的最底部。

我最終使用的修復方法是設置height =設備高度,iOS7沒有任何與視口大小調整/導航重疊相關的問題。令我驚訝的是,在所有情況下,頁面仍然是設備高度的100%。

<meta name="viewport" content="width=device-width, height=device-height, user-scalable=no"> 

爲了得到這個固定高度的情況與iOS5的和6一致地工作,我做了一些設備檢測和人工計算設備高度 - 20像素,重置視口標籤。

function iOSversion() { 
    if (/iP(hone|od|ad)/.test(navigator.platform)) { 
    // supports iOS 2.0 and later: <http://bit.ly/TJjs1V> 
    var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/); 
    return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)]; 
    } 
} 

ver = iOSversion(); 

if (ver[0] >= 5 && ver[0] <= 6) { 
    $('head meta[name="viewport"]').attr("content", "width=device-width, height="+(window.innerHeight-20)+", user-scalable=no") 
} 

我覺得有點不對這個解決方案,但堅持搖滾(新的Safari瀏覽器)和硬地(舊Safari瀏覽器)之間,這是我的回答。

如果您找到更好的方法,請請讓我知道!祝你好運:)

+0

我應該試試這個。會讓你知道! – changelog