2014-04-01 39 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的,你只需要使用上面的方法替換最後一個網址數組中,可以彈出,或者只是繼續追加到數組這一點。並做你的其他行爲。