小编Ale*_*ret的帖子

阻止浏览器滚动HTML5历史记录popstate

当popstate事件发生时,是否可以阻止滚动文档的默认行为?

我们的网站使用jQuery动画滚动和History.js,状态更改应该将用户滚动到页面的不同区域,无论是通过pushstate还是popstate.问题是浏览器在发生popstate事件时自动恢复先前状态的滚动位置.

我已经尝试使用容器元素设置为文档的100%宽度和高度,并滚动该容器内的内容.我发现的问题是它似乎没有滚动文档那么顺畅; 特别是如果使用大量的css3,如盒阴影和渐变.

我还尝试在用户启动的滚动期间存储文档的滚动位置,并在浏览器滚动页面后(在popstate上)恢复它.这在Firefox 12中运行良好,但在Chrome 19中,由于页面正在滚动和恢复,因此存在闪烁.我假设这与滚动和被触发的滚动事件之间的延迟有关(滚动位置被恢复的地方).

Firefox在popstate触发之前滚动页面(并触发滚动事件),Chrome首先触发popstate然后滚动文档.

我见过的所有使用历史API的网站都使用与上述类似的解决方案,或者只是在用户返回/转发时忽略滚动位置更改(例如GitHub).

是否可以阻止文档在popstate事件中滚动?

html javascript browser-history dom-events

78
推荐指数
2
解决办法
2万
查看次数

标签 统计

browser-history ×1

dom-events ×1

html ×1

javascript ×1