Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PushState()PopState()集成_Javascript_Html_Browser_Browser History - Fatal编程技术网

Javascript PushState()PopState()集成

Javascript PushState()PopState()集成,javascript,html,browser,browser-history,Javascript,Html,Browser,Browser History,我有一个网站,使用.js提供这样的内容: var FluidNav = { init: function() { $("a[href*=#]").click(function(e) { e.preventDefault(); if($(this).attr("href").split("#")[1]) { FluidNav.goTo($(this).attr("href").split("#")[1]); }

我有一个网站,使用.js提供这样的内容:

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是实现这一目标的最佳方式

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

  • 如果您在浏览器中键入website.com/#team,您将看到首页,而不是#team页面。如果你想导航到#team,你必须从那里点击
  • 如果您导航到#team,然后想返回到首页,然后按下back按钮,您将被重定向到访问网站之前的位置。可以说被踢出去了
  • 这样做的目的是获得更流畅的浏览体验

    但是,我现在需要实现以下目标,对于我将要对上面的.js文件进行哪些更改,我有点不知所措:

  • 实现后退按钮功能(操纵 浏览器的历史记录存储)
  • 当我在 URL栏,以转到该页面而不是首页

  • 下面是一个使用此功能构建的示例网站,您可以看到它是如何运行的

    您可以尝试集成一个库,该库可以处理无法pushState的浏览器(回退到您描述的散列URL。我在过去有过一些运气。(明白了吗??)

    注意:此答案由提问者提供,作为对问题的编辑,而不是答案。我将其移至此处以符合网站标准


    我做了以下工作:

  • 按照以下说明将History.js下载并解压缩到我的服务器:

  • 请按照以下步骤进行安装:

  • 从此处和此处安装StateRouter

  • 迄今为止所取得的成就:

    现在,URL实际上会随着“后退”按钮而改变,这意味着:


    我进入Home->Users->Staff,然后使用后退按钮,URL栏中的URL将发生如下变化:www.123.com/#Staff->www.123.com/#Users->www.123.com/#Home。但是,只有URL会发生变化,而不是内容。有什么想法我遗漏了吗?

    一般来说,我发现了任何改变b的应用程序E“后退”按钮的行为非常烦人。也许你可以设置一个剥离的小提琴?这将有助于玩,因为解决方案不明显。请指定剥离的小提琴是什么?尝试用谷歌搜索,但没有效果。谢谢你的回答!我做了以下操作: