Mobile Safari:为什么window.scrollTo(0,0)不能滚动到(0,0)?

时间:2014-07-07 17:25:12

标签: javascript knockout.js twitter-bootstrap-3 mobile-safari sammy.js

我使用Bootstrap 3,Sammy.js和Knockout 3构建了一个小型单页Web应用程序。我发现当页面向下滚动时,我无法获取{当我也更改window.scrollTo(0, 0)时,{1}}可以在Mobile Safari上工作 - 特别是在iPhone 5C上的iOS 7上(可能会在其他iPhone型号上发生)。

当我尝试这样的事情时:

location.hash

页面将几乎一直滚动到顶部 - 它通常会滚动到Y = 12或13.如果我在调用self.changeState = function() { self.state(State.NewState); location.hash = 'somevalue'; window.scrollTo(0, 0); }; 时它将永远不会滚动到0用户滚动到页面的底部(内容足够高,以保证滚动到顶部)。

我尝试了各种StackOverflow答案/建议(例如The same old issue, .scrollTop(0) not working in Chrome & Safari);通常的补救措施(包裹在window.scrollTo(0, 0);中)不会改变行为 - 它仍会滚动到靠近页面顶部的某个位置,但不会到达顶部。

标题样式:

setTimeout

视口设置:

<div class="navbar navbar-default navbar-inverse navbar-static-top">

滚动尝试:

<meta name="viewport" 
      content="width=device-width, 
               height=device-height, 
               initial-scale=1.0, 
               maximum-scale=1.0, 
               target-densityDpi=device-dpi" />

self.changeState = function() {
    self.state(State.NewState);
    location.hash = 'somevalue';
    window.scrollTo(0, 0);
};

我已经使用Safari Web Inspector挖掘了这一点,并且就页面结构而言似乎没有任何不妥之处。我只是不确定在这里寻找什么 - 任何想法?

修改

到目前为止,我还没有能够在我的应用程序代码之外重现这一点。我试图在JSFiddle中打破这个 - 在这一个中,它正常工作(例如,它应该滚动到0,0):http://jsfiddle.net/rringham/n9evU/24/show

3 个答案:

答案 0 :(得分:0)

在我的情况下,同样的问题,但它来自我在iframe中的事实。 所以做window.top.scrollTo(0,0)就成了!!!!

答案 1 :(得分:0)

我设法通过在元素上使用height: 100vhmin-height: 100vh来重新创建此问题。我改变了我的CSS以使用100%代替(这有点痛苦)并且问题消失了。

答案 2 :(得分:0)

尝试设置scrollTo(-n,0); “ n”是小于0的任何数字