Javascript 角度ui路由器更改滚动状态

Javascript 角度ui路由器更改滚动状态,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,下面是一个布局示例。假设截面高度大于或等于用户的视口 +----------+ | Section1 | +----------+ | Section2 | +----------+ | Section3 | +----------+ 所有这些部分都放置在一个视图中。我想在用户滚动页面并到达其中一个部分时动态更改浏览器url:用户第一次看到http://example.com/#/section1(不使用html5模式),然后他向下滚动一页,应该会看到http://example.com/#/

下面是一个布局示例。假设截面高度大于或等于用户的视口

+----------+
| Section1 |
+----------+
| Section2 |
+----------+
| Section3 |
+----------+
所有这些部分都放置在一个视图中。我想在用户滚动页面并到达其中一个部分时动态更改浏览器url:用户第一次看到
http://example.com/#/section1
(不使用html5模式),然后他向下滚动一页,应该会看到
http://example.com/#/section2
第2节
元素在用户视口中可见时。此外,如果用户在打开链接时复制链接,即
http://example.com/#/section2
我需要将页面滚动到该部分

要检测用户当前查看的节,我使用指令

现在我已经通过参数完成了:

$state.go($state.current, {
    section: $scope.activeSectionId // e.g. 'section2'
}, {
    notify: false, // do not reload page
    location: 'replace' // do not save as new history entry
});
但这种方式不太好,url看起来也不友好。此外,它还有一个bug,当我单击带有ui sref的链接时,第一次页面跳转,在查看部分更改了一段时间并触发了上面提到的代码,所以实际上它并没有根据ui sref进行导航。但下一次我单击时,所有操作都很好(这发生在页面重新加载之后)


如果可能的话,有人能建议如何做得更好吗?

当您使用$state.go($state.current)时,为什么要更改状态?也许改用anchorScroll,但对html5不太确定

编辑:


对不起,我错过了关于鼠标滚动的内容。检查这个答案和$location.hash(id)的用法

使用锚定滚动无法解决使用鼠标滚轮、键盘等自然滚动时更改状态的问题。它只会在单击某个链接或按钮时更改状态。是的,位置哈希可以做到这一点,但它会在url中生成另一个#值,如果我切换到HTML5模式,它(哈希)也将保留在url中。我的主要目标是实现状态改变,最终彻底消除url中的哈希。但正如我现在所理解的,不可能以清晰的方式做到这一点,所以如果没有新的答案出现,我会接受你的答案,因为它至少部分解决了这个问题。谢谢