如何在iOS上的Safari浏览器中滚动时监视滚动位置?

我目前使用$(window).bind('scroll', foo); 监视$(window).scrollTop()并做些东西来创build视差效果。

在所有桌面浏览器中,用户滚动的每个像素都会调用foo(),所有内容都很漂亮。 在iOS上的Safari中,滚动事件仅在滚动完成后才被触发。

我添加了$(window).bind('touchmove', foo); 以确保在iOS中的滑动过程中调用该函数,这让我进一步了一点。 当用户释放手指时,页面继续滚动,但事件停止发射。

有任何想法吗?

当我看到你的问题时,我打算为此做一个polyfill(如果这样不存在?)。 不幸的是,我的时间很less。

这个想法是有一个setInterval ,这是ontouchstart启动,并检查document.body.scrollTop是否自上次更改,例如。 每20毫秒。 如果是,那么我们手动调度滚动事件。 否则,我们clearInterval因为显然没有更多的滚动发生。

这将是简短的。 如果你有更多的时间(比我),那么随时尝试这些指导方针。

编辑:现在,进一步阅读,同样的想法似乎是build议在另一个答案。 你确定在iPad上滚动时间间隔是否停止?

我强烈build议使用“Skrollr”JavaScript库。 这是迄今为止我发现的最好的移动滚动animation选项,并且很容易快速启动和运行。 根据开始和结束滚动位置创buildanimation并操作CSS。 为大多数标准CSS属性创build尽可能多的数据滚动位置和animation。

在下面的例子中,背景颜色会在500像素滚动的过程中生成animation:

 <div data-0="background-color:rgb(0,0,255);" data-500="background-color:rgb(255,0,0);">WOOOT</div> 

在Git上签出仓库: https : //github.com/Prinzhorn/skrollr

Skrollr演示示例: http ://prinzhorn.github.io/skrollr/

真棒世界的例子: http : //www.fontwalk.de/03/

苹果公司的iPhone 5c网页使用了一些视差滚动效果,这种效果似乎会继续,手指仍然会触摸屏幕和滚动。 所以我想JavaScript不能完全禁用滚动。 Tumult Hype也提供这个function。

虽然这是不可能的,可以这么说,你可以使用iscroll来做到这一点

因此,您可以使用适用于iOS和Android移动设备/平板电脑的iScroll,并使用您目前正在为桌面设备进行操作的方式。

iScroll有一些callback函数的选项可以在某些事件上调用 – 比如“onScrollMove”,“onBeforeScrollEnd”,“onTouchEnd”等等。不幸的是,没有一个选项可以对“每个位置变化执行callback,包括变化导致用户停止触摸屏幕后滚动的势头“。 但是,添加一个很容易。

在iScroll源代码中,在“// Events”注释附近的第127行,添加一个新variables:

 onPosChange: null 

然后,在第308行的“_pos”函数末尾加上这一行:

 if (this.options.onPosChange) this.options.onPosChange.call(); 

(只要调用在“onPosChange”选项中传递的函数,如果存在的话)。

完成之后,下面的示例代码将为id =“iscroll_container”的div设置iScroll,并在每次更改时将Y偏移量打印到控制台:

 var myScroll; function loaded() { myScroll = new iScroll('iscroll_container', { onPosChange: actOnScroll }); } document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false); //Use this for high compatibility (iDevice + Android) document.addEventListener('DOMContentLoaded', function () { setTimeout(loaded, 200); }, false); function actOnScroll(){ console.log('got a scroll move! Vert offset is: ' + myScroll.y); } 

请注意, Ben的保镖Parallax站点使用iScroll在iPad上工作(他们使用iscroll的旧版本,并不完全按照我在这里描述的方式)

另外, Pi Parallax Site的生活在iPad上的效果非常好 – 我不知道他们是如何做的,但至lesscertificate这是可能的!

这可能是一个与jQuery本身的错误: http : //bugs.jquery.com/ticket/6446

该票已经开放了一段时间,适用于iOS 4,但也许你应该研究用纯javascript来计算滚动位置。

据我所知,在大多数移动设备上滚动时,没有JavaScript执行。 有一些解决方法(fe iscroll)在那里。 Iscroll正在使用CSS技术“变换”。 但滚动时无法执行JavaScript。 我想平滑的滚动algorithm太昂贵了。