【发布时间】:2014-11-06 16:35:09
【问题描述】:
我正在尝试创建一个 Ember 应用,其中保留路线之间的滚动位置,为用户在浏览时提供更愉快的体验。
预期结果
如果我在 /pageb 上向下滚动 500px,单击指向 /pagea 的链接,单击浏览器后退按钮,我应该回到 500px 滚动顶部。
实际结果
点击浏览器后退按钮时,滚动顶部等于/pagea的高度。
如何重现
git clone https://github.com/eTilbudsavis/ember-scroll-demo
cd ember-scroll-demo
npm install
ember serve
open http://localhost:4200/pageb
然后你一直滚动到底部,点击pagea链接,然后点击浏览器的返回按钮,你应该会看到问题。
结语
我认为这种行为的原因是当我单击浏览器后退按钮时,浏览器会尝试滚动回它在离开该路线之前的位置。因为 Ember 还没有渲染那个视图,所以浏览器不能去那里。它只能向下滚动到 /pagea 的高度。
现在,更棘手的是,如果我转到浏览器的控制台并在单击返回后手动设置滚动顶部,也没有任何反应。浏览器似乎认为它位于右侧滚动顶部,即使它不是。如果我用鼠标进行单次滚动,浏览器会一直跳到它应该在的位置。
我希望我已经尽可能简洁地解释了这一点。否则,请随时询问更多详细信息。
谢谢!
【问题讨论】:
-
我更新了我的答案,它现在应该可以在 Firefox 和 Chrome 浏览器中使用了。
-
另一个答案,带有混合:reefpoints.dockyard.com/2014/05/05/…
-
我试过那个,但它并不能正常工作,尤其是在 Chrome 中。
标签: jquery css ember.js pushstate