如何在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太昂贵了。