我有一个函数,用于检查用户的滚动位置,以便在他们滚过页眉后使菜单固定。
function checkScrolling() {
if( $(window).scrollTop() > $('.masthead').height() ) { // we check against ACTUAL height
$('.menu').addClass('fixed');
}else {
$('.menu').removeClass('fixed');
}
}
这里是桌面和触摸屏事件监听器:
$(document).bind('touchstart touchend touchcancel touchleave touchmove', function(e){
checkScrolling();
});
$(window).scroll(function(){
checkScrolling();
});
然而,触摸事件只能在触摸移动期间可靠地使菜单固定。如果我用向上或向下的快速滑动滚动,菜单在变为固定或非固定之前会有一些延迟。
有什么想法可以解决这个问题吗?在此处查看代码示例:http://dev.driz.co.uk/mobileMasthead.html(已根据以下某些答案进行了修改,但在 iPad 或 iPhone 上仍无法正常工作)
更新: 阅读相关主题的内容后发现,像检查滚动位置之类的 JS 操作不会在滚动期间发生...但是......我注意到http://www.facebook.com/home/在我的 iPad 上测试时没有这个问题。因此,肯定有可能实现这种效果,而不使用诸如 iScroll 或类似的自定义 JavaScript 滚动条。
touchmove
?我认为touchmove
和onScroll
应该能够满足您需要检查粘性导航的场景。如果尝试使用$('body').bind()
或$(window).bind()
而不是$(document).bind()
,是否会得到不同的结果?我在定位页面的较小部分时使用了touchmove
,并且没有延迟返回信息。 - Jason Lydon