当 popstate 事件发生时,是否可以防止文档的默认滚动行为?
我们的站点使用 jQuery 动画滚动和 History.js,状态更改应该通过 pushstate 或 popstate 将用户滚动到页面的不同区域。问题是当 popstate 事件发生时,浏览器会自动恢复前一个状态的滚动位置。
我尝试使用一个设置为文档100% 宽度和高度的容器元素,并滚动该容器中的内容。我发现这样做的问题是,它似乎不像滚动文档那样流畅; 特别是如果使用大量的 css3,比如框阴影和渐变。
我还尝试在用户启动滚动时存储文档的滚动位置,并在浏览器滚动页面后(在 popstate 上)恢复它。这在 Firefox12中可以很好地工作,但是在 Chrome19中,由于页面被滚动和恢复,会出现一个闪烁。我假设这是因为在滚动和触发滚动事件之间存在延迟(滚动位置在这里被恢复)。
Firefox 在 popstate 触发之前滚动页面(并触发滚动事件) ,Chrome 首先触发 popstate,然后滚动文档。
我见过的所有使用历史 API 的站点,要么使用类似于上面那些的解决方案,要么在用户返回/转发时忽略滚动位置的变化(例如 GitHub)。
是否有可能防止文档在 popstate 事件上滚动?