在原生 JavaScript 中,可以使用以下方法来监听路由的变化:
1. 使用 hashchange
事件
当使用 hash 路由(即 URL 中包含 #
部分)时,可以通过监听 hashchange
事件来响应路由的变化。
示例:
window.addEventListener("hashchange", function () {
console.log("Hash changed to:", window.location.hash);
// 可以在这里根据 hash 值更新页面内容
});
// 手动触发 hashchange 事件
window.location.hash = "#section1"; // 会触发 hashchange 事件
2. 使用 popstate
事件
当使用 HTML5 的 History API(即 pushState 和 replaceState)时,可以通过监听 popstate
事件来响应路由的变化。
示例:
window.addEventListener("popstate", function (event) {
console.log("Location changed to:", document.location.href);
// 可以在这里根据历史记录状态更新页面内容
});
// 使用 History API 更新 URL
history.pushState({ page: 1 }, "Title 1", "/page1");
history.pushState({ page: 2 }, "Title 2", "/page2");
3. 手动管理路由状态
如果需要更复杂的路由管理,可能需要手动维护路由状态并响应 URL 的变化。可以结合 hashchange
和 popstate
事件来实现更复杂的路由逻辑。
示例:
function updatePageContent() {
const path = window.location.pathname;
console.log("Current path:", path);
// 根据路径更新页面内容
}
// 监听路径变化
window.addEventListener("popstate", updatePageContent);
// 处理初始加载时的路径
window.addEventListener("load", updatePageContent);
// 使用 History API 更新 URL
function navigateTo(path) {
history.pushState(null, "", path);
updatePageContent();
}