我正在构建一个针对 Android 2.2+、Blackberry 9+ 和 iOS 4+ 的移动应用程序。在我们的堆栈中,我们使用 Phonegap、jQuery 和iScroll(以及其他)。
我们的一个应用程序屏幕如下所示(为匿名而编辑的文本)- 在 iOS 5 模拟器的 Safari 中运行。
如您所见,这是一个典型的输入屏幕,具有固定的标题,多个块级表单元素延伸到设备屏幕的整个区域,更少的填充。
正如我所提到的,我们的应用程序使用 iScroll。我们使用以下代码在此页面上对其进行初始化(取自 iScroll 'forms' 示例)。
// ...
window.scroller = new iScroll(id, {
useTransform: false,
onBeforeScrollStart: function(e) {
var target = e.target;
while (target.nodeType != 1) target = target.parentNode;
if(target.tagName != 'select'
&& target.tagName != 'input'
&& target.tagName != 'textarea') {
e.preventDefault();
}
}
});
// Disable touch scrolling (Req'd for iScroll)
window.document.addEventListener('touchmove', function(e) {
e.preventDefault();
}, false);
// ...
在此屏幕上,我注意到当用户触摸背景的任何部分时内容滚动正常,但当您通过触摸其中一个输入元素开始滚动手势(向上或向下滑动)时,内容不会滚动。正如您所理解的那样,这基本上使该屏幕无法使用,因此我正在寻找修复方法。
从那以后,我在 iScroll 中找到了罪魁祸首;
if (nodeName == "TEXTAREA" || nodeName == "INPUT" || nodeName == "SELECT" ) return;
(iscroll.js 中的 179),此错误的一个未解决问题,声称修复,以及一个声称修复它的拉取请求,但是错误的作者似乎有不正确的行号,阻止我尝试修复,并且提到的拉取请求对我不起作用(在 iOS 5.1、Android 4.0.4 上测试)。
我的问题 - 有没有办法让用户在触摸输入元素时滚动(使用 iScroll)?如果没有,iScroll 在这种情况下完全没用。目前,我正在看
- 使用声称与 iScroll 具有相同功能的Overthrow 垫片- 但是由于Android的各种 问题 , 这不是一个很好的选择- 我们的主要平台之一。
- 取消 iScroll 并丢失我的固定标题。
现在是 2012 年——我们还没有办法在移动浏览器上做到这一点吗?!?