我正在用導航功能構建一個小型單頁應用程序。頁面位於div容器中,通過點擊鏈接顯示。該頁面changig代碼history.pusht狀態/後退按鈕/在單個頁面中導航應用程序
// show the given page, hide the rest
function show(elementID) {
history.pushState({
plate_id: 1,
plate: elementID
}, null, elementID);
goTo(elementID);
}
function goTo(elementID) {
var ele = document.getElementById(elementID);
if (!ele) {
console.log("fail");
return;
}
// get all pages, loop through them and hide them
var pages = document.getElementsByClassName('page');
for(var i = 0; i < pages.length; i++) {
pages[i].style.display = 'none';
}
// then show the requested page
ele.style.display = 'block';
}
window.onpopstate = function (event) {
var content = "";
if(event.state) {
content = event.state.plate;
}
if (content != '') goTo(content);
}
的鏈接看起來像
<a href="#" onclick="show('Page_1');" id="1">page 1</a>
和div的
<div id="Page_1" class="page" style="">
現在,當我使用某個鏈接的網址更改爲.../Page_1#或.../Page_2#頁面直接顯示。現在,如果我使用後退按鈕(自己或瀏覽器無關緊要),會發生一些我不明白的魔法。
例如
- 上點擊第一連桿 - >去../Page_1#(直接,everythinks細)上謝勝利鏈路
- 點擊 - >去../Page_2#(直接, everythinks罰款)
- 使用後退按鈕 - >再次使用後退按鈕去../Page_2(不包括#和什麼也沒有發生,但應該去PAGE_1 ??? !!)
- - >去../Page_1# (什麼也沒有發生)
- 再次使用後退按鈕 - >轉到../Page _1(頁面1正在加載)
我不明白爲什麼在第3步和第4步發生思考!這將是很好,如果有人可以幫助我
嗯,這對我的作品!謝謝!我對編程感興趣,試圖以「乾淨」的方式實現思考......所以這很好,還是有其他選擇只是一點點「專業」?! – Linda 2014-12-02 08:19:38
還有一些其他問題...如果我去page1,然後到page2等URL更改爲.../page1,.../page2等等。現在,如果用戶觸摸刷新按鈕,他將得到一個404錯誤,因爲它只是一個頁面的應用程序,而且通緝的網址不會激化。那麼刷新按鈕有沒有解決方法? – Linda 2014-12-02 08:29:14
在這種情況下,您可能希望它們看起來像這樣:「http://example.org/bla?Page_1」而不是像「http:// example.org/bla/Page_1」那樣的URL '。注意問號:)。我假設'bla'是你的web應用程序的'html'文件,並且服務器將它重定向到'bla.html'。 – evilham 2014-12-02 11:50:35