jon*_*rdo 12 javascript jquery scroll angularjs angular-ui-router
在我的工作中,我们有一个用AngularJS创建的单页网站.
我们使用的是ui-router插件(版本0.2.0).
最近我注意到当从一个状态移动到另一个状态时,窗口不会滚动到顶部.
我甚至尝试使用jQuery的scrollTop()函数在每次状态更改时使用$stateChangeSuccess事件将其滚动到顶部(使用事件).但它没有用.
所以我开始调查,我注意到scrollTop()页面上的每个元素都返回0.
不仅如此,当我打印window.scrollY到控制台时,我得到0(无论我在页面的哪个位置).不仅在我的代码中,而且即使我只是在chrome dev工具控制台中编写它.
我用AngularJS和ui-router编写了几个应用程序,它只发生在这个特定的应用程序中.
我已经检查过我是否覆盖了scrollTop()函数甚至是window.scrollY字段,但是没有找到任何东西.
我尝试使用ui-viewwith 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());
}
}
Run Code Online (Sandbox Code Playgroud)
该功能只打印出一个带有顶部滚动的元素.
元素是一个包装div,它包含整个内容和主视图(我的应用程序中有嵌套视图).
如果我scrollTop(0)在这个元素上使用我得到我想要的东西,但它只处理症状,而不是真正的问题.
正如@Hans 评论的那样,实际上没有问题。我有一个包装元素,其定位absolute为:
top:0;
bottom:0;
left:0;
right:0;
overflow:auto
Run Code Online (Sandbox Code Playgroud)
所以窗口scrollTop总是0,滚动条实际上属于包装元素。
由于我无法摆脱包装元素的定位,因此我使用了 ui-router 的$stateChangeSuccess事件,并手动将包装元素滚动到顶部。
| 归档时间: |
|
| 查看次数: |
17396 次 |
| 最近记录: |