我正在创建一个页面,并使用pushState来更改附件。现在,如果我向后推,则会触发popstate,并且我希望将页面从当前位置滚动到最后一个位置。当然,这是可行的,但是页面会跳到顶部。
有人知道如何防止这种行为吗?我用jQuery动画滚动..。
谢谢:)
//编辑: ok我发现,如果我动画滚动,然后改变url,它不会跳-但现在我必须双按后退按钮回来.
http://www.testwebseiten.at/user/falk/stein-jagersbacher.at
代码有点乱七八糟,所以我解释一下:
var scrollCurrentSection = function(event) {
if (typeof event.preventDefault != 'undefined')
event.preventDefault();
var page = "";
if (window.location.href.substr(-1) == '/')
page = sjag.index;
else
page = window.location.href.match(/([^\/]+)$/)[1];
$this = $('a[href$="'+page+'"]');
if ($this.length) {
sjag.scrollToSection($this);
}
}
window.onpopstate = scrollCurrentSection;sjag包含几个选项和方法..。所以sjag.index只包含'index.php',sjag.scrollToSection包含动画。
在单击导航的链接时,调用以下函数:
// set navi
$("#navi a, #navi-add a").click(function(event) {
var data = $(this).data('sjagpage');
if (typeof data == 'undefined')
return;
event.preventDefault();
// animate scrolling
$this = $(this);
sjag.scrollToSection($(this), function() {
history.pushState("", "", $this.attr('href'));
});
});$(this).data('sjagpage')包含jQuery-元素。
当我没有动画滚动它只需要一次点击回来-但当我现在动画,它需要两个.为什么?
发布于 2012-03-09 13:59:17
我认为问题在于,event.preventDefault是一个由jQuery添加到event对象的函数,但是您没有使用jQuery绑定事件处理程序。因此,默认导航并没有被阻止,因此您最终得到了两个历史记录项,但要向后导航。
而不是:
window.onpopstate = scrollCurrentSection;你应该把它绑定起来,就像:
$(window).bind("popstate", scrollCurrentSection);https://stackoverflow.com/questions/9634518
复制相似问题