2014-04-01 122 views
4

我正在使用Rails 4创建类似于模态叠加层的Pinterest。它们以无限滚动页面的半透明叠加层显示。history.back(-1)没有刷新最后一页?

当前,当您单击链接时,浏览器的历史记录将更改为反映您正在查看的项目。不过,我有一个退出按钮,当按下时,我想让它删除叠加层(它已经做了),但是然后更改URL而不会丢失用户在无限滚动上的位置。

pinterest究竟如何完成更改URL而不刷新最后一页?我会用'/'使用pushState,但我有多种类型的无限滚动页面,我希望脚本能够适用于所有这些页面。

的application.js

if (history && history.pushState){ 
    $(function(){ 
    $('body').on('click', 'a', function(e){ 
     $.getScript(this.href); 
     history.pushState(null, '', this.href); 
    }); 
    $(window).bind("popstate", function(){ 
     $.getScript(location.href); 
    }); 
    }); 
} 

紧密覆盖脚本

function removeDabble() { 
    history.back(-1); 

    /*var elem = document.getElementById('artview'); 
    elem.parentNode.removeChild(elem); 
    return false;*/ 
} 
+0

我很好奇这件事。你有没有遇到过解决方案? – TenJack

+0

不,我不相信这是可能的。我在Pinterest管理它的印象之下,但由于使用该网站多一点似乎不是这样。 – div

+0

我试图做类似的事情,还没有找到解决办法。 – Nate

回答

1

最好的解决办法是使用某种途径脚本。像戴维斯,萨米,十字路口,导演,routes.js ....这些选择颇多。

您可以轻松实现pushstate/hashtag样式,无需刷新页面。这些插件可以帮助您处理不支持pushstate的订购浏览器。

如果你不需要照顾旧的浏览器。你可以只更改网址而不刷新页面

// this go to the new url 
window.history.replaceState(“”, “Title”, “/newUrl”); 

// first param is if you want to parse some data around, but its best to just use localstorage/session storage or cookie, and a event listener. 

// second parameter is the page title, some browser ignores it 

// last param is the url eg : 
     '/newUrl' => .com/newUrl, 
     '/1/2/3' => .com/1/2/3 

实现history.back,就像你想要的。你可以创建

一个新的数组例如:browserHistory = []

对URL的每一个变化,推动网址到该阵列中,我通常把10的限制,并且它摒弃了早期的,但随你便。

function updateHistory(url) { 
    window.browserHistory = window.browserHistory? window.browserHistory : []; 
    if (window.browserHistory.length > 10) { 
     window.browserHistory = window.browserHistory.shift() 
    } 
    window.browserHistory.push(url) 
} 

比我们自己的版本history.back的,你只需要使用上面的方法替换最后一个网址数组中,可以弹出,或者只是继续追加到数组这一点。并做你的其他行为。