2013-10-04 45 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