在我的工作中,我们有一个我用AngularJS创建的单页网站
我们正在使用ui-router插件(版本0.2.0)
最近我注意到当从一个状态移动到另一个状态时,窗口不会滚动到顶部
我甚至试图在每次状态更改时使用jQuery的scrollTop()
函数手动滚动到顶部(使用$stateChangeSuccess
事件)。但它没有用。
所以我开始调查,我注意到scrollTop()
为页面上的每个元素返回0。
不仅如此,当我将window.scrollY
打印到控制台时,我得到0(无论我在页面上的哪个位置)。不仅在我的代码中,而且即使我只是在chrome dev工具控制台中编写它。
我用AngularJS和ui-router编写了几个应用程序,它只发生在这个特定的应用程序中。
我已经检查过我是否覆盖了scrollTop()
函数甚至是window.scrollY
字段,但是没有找到任何内容。
我已尝试将ui-view
与autoscroll="true"
和autoscroll="false"
一起使用,但它没有任何区别。
我也试过提供html
和body
元素height:100%
,我也试过了。但没什么。
我真的不知道下一步该做什么。
我无法重现这个问题,但是如果您认为我应该在这里发布任何可能有任何帮助的代码,我会很乐意这样做。
谢谢!
修改
我在控制台上运行此功能:
var l = $('*').length;
for(var i = 0; i < l; i++) {
var elem = $('*:eq(' + i + ')');
if(elem.scrollTop() > 0) {
console.log(elem, elem.scrollTop());
}
}
该功能只打印出一个带有顶部滚动的元素
元素是一个包装div,它包含整个内容和主视图(我的应用程序中有嵌套视图)
如果我在这个元素上使用scrollTop(0)
,我得到了我想要的东西,但它只处理症状,而不是真正的问题。
答案 0 :(得分:4)
正如@Hans评论的那样,实际上并没有问题。
我有一个包裹元素,位于absolute
,位于:
top:0;
bottom:0;
left:0;
right:0;
overflow:auto
所以窗口的scrollTop
始终为0,滚动条实际上属于包装元素。
由于我无法摆脱包装元素的定位,我使用了ui-router的$stateChangeSuccess
事件,并手动将包装元素滚动到顶部。
答案 1 :(得分:2)
在控制台中,尝试
console.log(frames)
console.log(frames.top.scrollY)
如果window.scrollY显示为0,则参考帧不能是窗口。你在页面上有任何iframe吗? console.log框架将显示页面上的框架列表 希望有所帮助。
答案 2 :(得分:1)
我的代码也发生了这个问题,我发现了一个正文{overflow:hidden;}是原因,我删除了“overflow:hidden;”一切都很好。