首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >popstate -需要在“后退”按钮上单击两次才能真正返回。

popstate -需要在“后退”按钮上单击两次才能真正返回。
EN

Stack Overflow用户
提问于 2012-03-09 13:04:01
回答 1查看 6K关注 0票数 6

我正在创建一个页面,并使用pushState来更改附件。现在,如果我向后推,则会触发popstate,并且我希望将页面从当前位置滚动到最后一个位置。当然,这是可行的,但是页面会跳到顶部。

有人知道如何防止这种行为吗?我用jQuery动画滚动..。

谢谢:)

//编辑: ok我发现,如果我动画滚动,然后改变url,它不会跳-但现在我必须双按后退按钮回来.

http://www.testwebseiten.at/user/falk/stein-jagersbacher.at

代码有点乱七八糟,所以我解释一下:

代码语言:javascript
运行
复制
    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包含动画。

在单击导航的链接时,调用以下函数:

代码语言:javascript
运行
复制
    // 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-元素。

当我没有动画滚动它只需要一次点击回来-但当我现在动画,它需要两个.为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-09 13:59:17

我认为问题在于,event.preventDefault是一个由jQuery添加到event对象的函数,但是您没有使用jQuery绑定事件处理程序。因此,默认导航并没有被阻止,因此您最终得到了两个历史记录项,但要向后导航。

而不是:

代码语言:javascript
运行
复制
window.onpopstate = scrollCurrentSection;

你应该把它绑定起来,就像:

代码语言:javascript
运行
复制
$(window).bind("popstate", scrollCurrentSection);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9634518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档