【发布时间】:2011-06-20 05:35:51
【问题描述】:
在我的AJAX 应用程序中,有一个主页,其中包含包含图像的文件夹。当用户单击文件夹时,它会隐藏文件夹,然后使用该文件夹中的图像重新填充相同的 div。这一切都是使用主题标签完成的。
在他们点击后退按钮之前,一切都很好。
当用户单击后退按钮时,会发生这种情况(按顺序,每次):
- 首先发生的事情是浏览器会迅速回到上次访问该哈希时的位置
- 我的
hashchange事件被调用,它会删除缩略图 - 现在在删除缩略图后没有足够的内容高度,窗口必须快速恢复到 0 的滚动顶部,因为一瞬间没有滚动条
- 然后文件夹再次显示
- 然后我的脚本启动以将用户恢复到他们在页面上的位置
问题:这造成了非常糟糕的flickering,因为滚动条被捕捉到了多少。
解决方案:让浏览器在哈希值变化时不尝试恢复其滚动位置。
我怎么知道这会起作用?当我在我的网站上设置按钮/链接来执行上述操作时,不会发生闪烁,因为浏览器不会自动尝试向下滚动。为什么不能将我自己的后退按钮放在网站上作为解决方案?人们真的很喜欢他们的浏览器后退按钮,而且闪烁真的很烦人。
我在下面包含了一些代码,但我认为没有必要查看:
// called when a folder is clicked
function hide_main() {
window.scroll_top = $(window).scrollTop();
$('#favorite_container').hide();
$('#top_div > h2.favorite_main').hide();
}
// called when the user wants to go back to the main page that lists all the folders
function show_main() {
$$.vars.lock = true;
$('#top_div > h2.favorite_other').remove();
$('#thumbs').empty();
$('#top_div > h2.favorite_main').show();
$('#favorite_container').show();
$('html, body').scrollTop(window.scroll_top);
}
那么我该如何阻止浏览器执行其默认行为,即滚动到按下后退按钮时的位置?
【问题讨论】:
标签: javascript jquery