按下后退按钮后转到其他页面时,滚动位置不会重置

ren*_*han 19 javascript scroll infinite-scroll angularjs

我在angularjs应用程序中滚动有问题.

目前它有2页:第一页是客户列表,您可以选择其中一个并查看其详细信息.第二个是公司列表,它的工作方式相同.

我正在使用面板在它们之间导航$location.path().该应用程序还有一个后退按钮,使用$window.history.back().

当您选择客户或公司列表中的某个项目,然后在按下该按钮后,您将返回到上一页(客户或公司列表)并恢复滚动位置.我正在使用标准$window.history.back()功能,没有实现任何自定义.

但这里出现问题:如果没有向任何方向滚动,只需转到另一个页面(到其他项目列表)滚动位置将不会重置.但如果你只是稍微滚动一下,它的位置就会重置.此外,如果你不使用后退按钮一切正常.

所以,问题是:在使用后转到另一页时我们如何重置滚动位置$window.history.back()

我也使用infinite-scroll插件,如果重要的话.但即使我关闭它,没有任何改变,所以我猜问题不在于插件.

Jęd*_*bek 2

我不久前遇到了类似的问题,并提出了简单(但不是优雅的解决方案)。

当视图更改时,我已将包装器滚动顶部值存储在范围中。返回时,我在包装器上再次应用该值。

实际上我不记得单击后退浏览器按钮时它的行为如何。你需要检查一下。


更改视图和存储scrollTop值 https://github.com/jedrzejchalubek/Reed/blob/master/src/app/controller/all.js#L20

angular.extend($scope.view, {
    panel: false,
    section: 'single',
    single: el,
    scrollPosition: $('#thumbs').scrollTop()
});
Run Code Online (Sandbox Code Playgroud)

返回并重新应用scrollTop值 https://github.com/jedrzejchalubek/Reed/blob/master/src/app/directives/back-to-list.js#L14

scope.$apply(function() {
    scope.view.section = 'list';
    scope.view.panel = false;
});
$('#thumbs').scrollTop( scope.view.scrollPosition );
Run Code Online (Sandbox Code Playgroud)

项目在github上,大家可以扫描一下。也许这有帮助。https://github.com/jedrzejchalubek/Reed