首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PushState() PopState()集成

PushState() PopState()集成
EN

Stack Overflow用户
提问于 2013-02-13 02:07:28
回答 2查看 331关注 0票数 0

我有一个使用.js提供类似内容的网站:

代码语言:javascript
复制
var FluidNav = {
init: function() {
    $("a[href*=#]").click(function(e) {
        e.preventDefault();
        if($(this).attr("href").split("#")[1]) {
            FluidNav.goTo($(this).attr("href").split("#")[1]);
        }
    });
    this.goTo("home");
},
goTo: function(page) {
    var next_page = $("#"+page);
    var nav_item = $('nav ul li a[href=#'+page+']');
    $("nav ul li").removeClass("current");
    nav_item.parent().addClass("current");
    FluidNav.resizePage((next_page.height() + 40), true, function() {
         $(".page").removeClass("current"); next_page.addClass("current"); 
    });
    $(".page").fadeOut(500);
    next_page.fadeIn(500);

    FluidNav.centerArrow(nav_item);

},
centerArrow: function(nav_item, animate) {
    var left_margin = (nav_item.parent().position().left + nav_item.parent().width()) + 24 - (nav_item.parent().width() / 2);
    if(animate != false) {
        $("nav .arrow").animate({
            left: left_margin - 8
        }, 500, function() { $(this).show(); });
    } else {
        $("nav .arrow").css({ left: left_margin - 8 });
    }
},
resizePage: function(size, animate, callback) {
    if(size) { var new_size = size; } else { var new_size = $(".page.current").height() + 40; }
    if(!callback) { callback = function(){}; }
    if(animate) {
        $("#pages").animate({ height: new_size }, 400, function() { callback.call(); }); 
    } else {
        $("#pages").css({ height: new_size }); 
    }
}};

到目前为止还不错,但是客户想要一个浏览器返回按钮功能集成。我做了作业,在SO和其他来源的帮助下,我发现pushState和popState是实现这一目标的最佳方法。

如果您花一秒钟时间阅读上面的代码,您将发现以下内容:

  1. 如果您在浏览器中键入website.com/#team,您将得到首页,而不是#team页面。如果您想导航到#team,就必须从那里单击。
  2. 如果您导航到#团队,然后想回到头版,然后按后退按钮,您将被重定向到您在创建网站之前的位置。可以说是被踢出去了。

这样做的目的是为了更顺畅的浏览体验。

但是,我现在需要实现以下目标,我有点不知道我要对上面的.js文件做什么更改:

  1. 实现工作回按钮功能(操作浏览器的历史存储)
  2. 当我在URL栏中键入website.com/#team时,转到该页面而不是首页。

下面是一个使用此功能构建的示例网站,这样您就可以看到它是如何工作的。http://themes.two2twelve.com/site/fluidapp/light/

EN

回答 2

Stack Overflow用户

发布于 2013-02-13 02:23:14

您可以尝试集成一个库来处理无法处理pushState的浏览器(回到您所描述的散列urls )。我以前在History.js上有过一些运气。(明白了吗?)

票数 0
EN

Stack Overflow用户

发布于 2019-08-22 09:37:50

注意:这个答案是由提问者提供的,作为对问题的编辑,而不是作为答案。我把它搬到这里是为了符合现场标准。

我做了以下工作:

  1. 按照以下说明下载并解压缩History.js到我的服务器:https://github.com/browserstate/history.js/
  2. 按照这里的安装:https://github.com/browserstate/ajaxify
  3. 从这里安装了StateRouter,不能理解History.js,需要简化吗?https://github.com/aknuds1/staterouter.js/tree/master/lib

到目前为止所取得的成就:

现在URL实际上是用back按钮改变的,意思是:

我转到Home -> Users -> Staff,然后使用后退按钮,地址栏中的URL将发生如下变化:www.123.com/#staff -> www.123.com/#users -> www.123.com/#home。但是,只有URl更改,而不更改内容。知道我错过了什么吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14845303

复制
相关文章

相似问题

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