scrollTo()与ipad和固定元素

时间:2012-02-23 16:23:42

标签: jquery ipad fixed scrollto

  

可能重复:
  Mobile Safari bug on fixed positioned button after scrollTop programmatically changed…?

我们正在尝试使用固定导航滚动页面的不同部分。

我们正在使用jquery scrollTo()。

仅在ipad上,第一次点击传递没有问题,但在此之后,导航似乎被禁用。 如果我们用手滚动,甚至一点点,那么链接再次工作。

以下是代码:http://lacabaneprod.com/test/

如何修复侧边栏?

3 个答案:

答案 0 :(得分:2)

几个星期前遇到同样的问题。

发生这种情况的原因是因为“内容”获得了焦点,并且点击屏幕会“点击”侧边栏后面的内容。只有在scrollTop属性上使用scrollTo插件或jquery.animate时才会发生这种情况。

为了解决这个问题,在scrollTo动画之后,我们重新定位了窗口。

$(window).scrollTop($(window).scrollTop() + 1);    
$(window).scrollTop($(window).scrollTop() - 1);

但请记住,在iOS 5之前不支持固定位置。

答案 1 :(得分:1)

对于使用Ariel Flesler的LocalScroll插件遇到此问题的任何人,Arief的上述答案有效,可以通过以下方式应用:

$(document).ready(function() {
$.localScroll.defaults.axis = 'x';
$.localScroll({
    target:'#content',
    onAfter:function(){
        var xPos = window.pageXOffset;
        var $fixedElement = $('#menubar');
        $fixedElement.css({ "position": "absolute" });
        window.scroll(xPos,0);
        $fixedElement.css({ "position": "fixed" });
        }
    });

});

在这种情况下,我有一个水平滚动的网站(因此默认为'x'轴 - 你的可能不同)。我正在滚动一个'#content'div,它被设置为'overflow:hidden'(因此是'target')。然后Arief的所有魔法都在'onAfter:function'中。

我已经调整了这个,而不是'window.scroll(0,0)' - 滚动回到页面的最开头 - 它通过使用window.pageXOffset获取当前窗口滚动位置并设置变量“xPos”为此(再次,如果您在Y轴上滚动,或者甚至两者,您可能还需要使用window.pageYOffset)。然后在'window.scroll(xPos,0)'中使用该变量 - 在y轴上我的是“0”,因为我没有在该轴上滚动。我相信可能有不同的计算当前滚动位置的方法,但这对我来说效果最好。

当我的'overflow:hidden'元素实际上是html标签时,我最初无法完成这项工作,因此将其移至'#content'div并且工作得很好。我一直在iPad 3上测试,所以不知道它是如何兼容它的。

答案 2 :(得分:0)

试试这段代码,它对我有用:

var $fixedElement = $('#nav'); // Replace this with your "fixed" element

$fixedElement.css({ "position": "relative" });
window.scroll(0, 0);
$fixedElement.css({ "position": "fixed" });