散列锚点的jqueryanimate导致返回按钮错误

散列锚点的jqueryanimate导致返回按钮错误,jquery,Jquery,我正在制作一个具有固定标题的网页,当用户单击标题中的导航链接时,整个页面(html和正文)都有一个动画幻灯片,将链接元素放在顶部,而不是直接跳到顶部。我的问题是,如果我尝试单击后退按钮,它将落后一节。例如,如果我在A区,然后转到B区,再转到C区,然后点击C区的“后退”按钮,直到我再次单击它,它才会返回到B页。url反映被点击的后退按钮,但页面保持不变。因此,在点击“后退”两次后,url将显示在A上,但页面实际上仍将显示在B上 这是我的jQuery代码,非常简单。如果有人能帮我恢复按钮功能,我将不

我正在制作一个具有固定标题的网页,当用户单击标题中的导航链接时,整个页面(html和正文)都有一个动画幻灯片,将链接元素放在顶部,而不是直接跳到顶部。我的问题是,如果我尝试单击后退按钮,它将落后一节。例如,如果我在A区,然后转到B区,再转到C区,然后点击C区的“后退”按钮,直到我再次单击它,它才会返回到B页。url反映被点击的后退按钮,但页面保持不变。因此,在点击“后退”两次后,url将显示在A上,但页面实际上仍将显示在B上

这是我的jQuery代码,非常简单。如果有人能帮我恢复按钮功能,我将不胜感激

$('.header-nav-item').click(scrollBody);

function scrollBody(e){
    e.preventDefault();

    var url_hash = "#" + e.target.href.substring(e.target.href.indexOf('#')+1);

    $('html,body').animate({
        'scrollTop':   $(url_hash).offset().top
    }, 500,'swing',function(){
        //reroute url
        window.location = url_hash;
    });
}

编辑:这个问题发生在Firefox和Chrome中。奇怪的是,IE在Firefox和Chrome中可以很好地处理back按钮,点击back按钮可以在URI更改之前找到页面中的位置。更改
窗口.位置的函数在动画完成后运行,这意味着“后退”按钮会将您带到动画完成的位置

在您的情况下,页面上的这两个位置完全相同,因此当您第一次单击“后退”按钮时,浏览器似乎什么也没做

以列表形式说明:

  • 用户点击链接
  • 动画滚动到定位点,当
  • 。。。通过将浏览器的URL更改为锚定,可以创建新的历史记录项
  • 这里有一种骇人的解决方案(我现在想不出任何其他方法):

    $('.header导航项')。单击(滚动体);
    函数体(e){
    e、 预防默认值();
    var url_hash=“#”+e.target.href.substring(e.target.href.indexOf('#')+1);
    //在更改任何内容(执行动画)之前浏览到锚点,以便返回
    //按钮将我们带到用户在单击
    //导航链接。我们保存原始位置($(document).scrollTop())--即。,
    //用户最初所在的位置--因此我们可以返回到它来制作动画。
    var orig=$(document.scrollTop();
    window.location.hash=url\u hash;
    窗口。滚动到(原始);
    $('html,body')。设置动画(
    {'scrollTop':$(url_hash).offset().top},
    500,
    “摇摆”
    );
    }