語法
在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。
js
addEventListener("navigate", (event) => { })
onnavigate = (event) => { }
事件型別
一個 NavigateEvent。繼承自 Event。
示例
使用 intercept() 處理導航
js
navigation.addEventListener("navigate", (event) => {
// Exit early if this navigation shouldn't be intercepted,
// e.g. if the navigation is cross-origin, or a download request
if (shouldNotIntercept(event)) {
return;
}
const url = new URL(event.destination.url);
if (url.pathname.startsWith("/articles/")) {
event.intercept({
async handler() {
// The URL has already changed, so show a placeholder while
// fetching the new content, such as a spinner or loading page
renderArticlePagePlaceholder();
// Fetch the new content and display when ready
const articleContent = await getArticleContent(url.pathname);
renderArticlePage(articleContent);
},
});
}
});
注意: 在 Navigation API 可用之前,要實現類似的功能,您必須監聽連結上的所有 click 事件,執行 event.preventDefault(),執行相應的 History.pushState() 呼叫,然後根據新的 URL 設定頁面檢視。而且這不會處理所有導航 — 只會處理使用者發起的連結點選。
使用 scroll() 處理滾動
在這個攔截導航的例子中,handler() 函式首先獲取並渲染一些文章內容,然後獲取並渲染一些次要內容。一旦主要文章內容可用,立即將頁面滾動到該內容是有意義的,以便使用者可以與之互動,而不是等到次要內容也渲染完成。為了實現這一點,我們在兩者之間添加了一個 scroll() 呼叫。
js
navigation.addEventListener("navigate", (event) => {
if (shouldNotIntercept(navigateEvent)) {
return;
}
const url = new URL(event.destination.url);
if (url.pathname.startsWith("/articles/")) {
event.intercept({
async handler() {
const articleContent = await getArticleContent(url.pathname);
renderArticlePage(articleContent);
event.scroll();
const secondaryContent = await getSecondaryContent(url.pathname);
addSecondaryContent(secondaryContent);
},
});
}
});
規範
| 規範 |
|---|
| HTML # event-navigate |
瀏覽器相容性
載入中…