我正在使用HTML歷史API來操縱瀏覽器歷史堆棧以控制在我的網站上使用JavaScript的導航。我設置的改變頁面的功能工作正常,但奇怪的是,當我爲每個單獨頁面更改添加pushState
時,pushState
會自動觸發,因此函數中最後一次頁面更改始終是最後一次執行的頁面更改。這意味着被推入的狀態總是最後的頁面更改語句。pushState執行時不應該到
中的JavaScript:
// Change Page Function
function ChangeContent (page) {
var pages={"homepage":{title: "homepage"},"servicespage":{title: "servicespage"},"estimatespage":{title: "estimatespage"}};
HideNav();
//Show home page
for(var homepage in pages) {
if(page!==homepage) {
document.getElementById(homepage).style.display='none';
}
else {
document.getElementById(homepage).style.display='block';
history.pushState("homepage", "Home", "home");
window.scrollTo(0,0);
}
}
//Show services page
for(var servicespage in pages) {
if(page!==servicespage) {
document.getElementById(servicespage).style.display='none';
}
else {
document.getElementById(servicespage).style.display='block';
history.pushState("servicespage", "Our Services", "services");
window.scrollTo(0,0);
}
}
//Show estimates page
for(var estimatespage in pages) {
if(page!==estimatespage) {
document.getElementById(estimatespage).style.display='none';
}
else {
document.getElementById(estimatespage).style.display='block';
history.pushState("estimatespage", "Get An Estimate", "estimates");
window.scrollTo(0,0);
}
}
}
當你運行該代碼,而不是每個單獨的頁面推動它的狀態被點擊的頁面時,得到推的狀態總是在估算頁面狀態。我嘗試過使用else if
語句,我試圖將每個for
語句嵌入到自執行函數中,希望它可以解決某種範圍問題,但我沒有運氣。
這是我onPopstate
功能:
// History State Change Display
window.onpopstate = function (event) {
var state = event.state;
console.log(state);
// Change History State Display To Home Page
if (state === "homepage") {
document.getElementById("homepage").style.display = 'block';
} else {
document.getElementById("homepage").style.display = 'none';
}
// Change History State Display To Services Page
if (state === "servicespage") {
document.getElementById("servicespage").style.display = 'block';
} else {
document.getElementById("servicespage").style.display = 'none';
}
// Change History State Display To Estimates Page
if (state === "estimatespage") {
document.getElementById("estimatespage").style.display = 'block';
} else {
document.getElementById("estimatespage").style.display = 'none';
}
};
出於某種原因,每一個新的頁面我點擊的URL是擴展/estimatespage
,然後當我點擊後退按鈕,它只是通過以相反的順序頁面週期它們被寫入換頁功能中,並正確更新URL。
我不完全確定這裏的問題是什麼,但我認爲我自動推送所有頁面的狀態,這很奇怪,因爲剩下的代碼只在選擇了正確的頁面時才執行。
任何幫助,將不勝感激,因爲我認爲這可能比我做的更明顯。
HTML
<div id="nav">
<div class="headerlist" onclick="ChangeContent('homepage');">Home</div>
<div class="headerlist" onclick="ChangeContent('servicespage');">Services</div>
<div class="headerlist" onclick="ChangeContent('estimatespage');">Estimates</div>
</div>
<div id=homepage></div>
<div id=servicespage></div>
<div id=estimatespage></div>
,你能否告訴了'ChangeContent()'調用? –
在問題底部的編輯中補充說明。 – 123