【发布时间】:2014-07-07 17:25:11
【问题描述】:
我使用 Bootstrap 3、Sammy.js 和 Knockout 3 构建了一个小型单页 Web 应用程序。我发现当页面向下滚动时,我无法让 window.scrollTo(0, 0) 在移动设备上工作Safari,当我也更改 location.hash - 特别是在 iPhone 5C 上的 iOS 7 上(虽然可能发生在其他 iPhone 型号上)。
当我尝试这样的事情时:
self.changeState = function() {
self.state(State.NewState);
location.hash = 'somevalue';
window.scrollTo(0, 0);
};
页面将几乎一直滚动到顶部 - 它通常会滚动到 Y = 12 或 13。如果我在用户处于滚动到页面底部(并且内容足够高,需要滚动到顶部)。
我尝试了各种 StackOverflow 答案/建议(例如 The same old issue, .scrollTop(0) not working in Chrome & Safari);通常的补救措施(包装在 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);
};
和:
self.changeState = function() {
self.state(State.NewState);
location.hash = 'somevalue';
window.setTimeout(function() {
window.scrollTo(0, 0);
}, 0);
};
我使用 Safari Web Inspector 对此进行了深入研究,就页面结构而言,似乎没有什么不合适的地方。我只是不确定要在这里寻找什么 - 有什么想法吗?
编辑:
到目前为止,我无法在我的应用程序代码之外重现这一点。我试图让它在 JSFiddle 中中断 - 在这个中,它可以正常工作(例如,它应该滚动到 0,0):http://jsfiddle.net/rringham/n9evU/24/show。
【问题讨论】:
标签: javascript knockout.js twitter-bootstrap-3 mobile-safari sammy.js