Navigation API

A single navigation event surface lets apps control route transitions and loading.

···
html
<div class="v"><header>NAVIGATE EVENT <span id="navState">link click</span></header><div class="stage nav"><div class="path"><span id="n0">click /items</span><span id="n1">prepare data</span><span id="n2">commit view</span></div><div class="screen" id="screen">Home</div></div><div class="muted">one event coordinates route + UI</div></div>
css
.v{width:min(94vw,760px);height:min(88vh,320px);padding:clamp(9px,2.4vmin,18px);border:1px solid var(--line);border-radius:12px;background:var(--surface);font:500 clamp(12px,2.4vmin,16px)/1.3 var(--font-sans,system-ui,sans-serif);display:flex;flex-direction:column;gap:clamp(5px,1.4vmin,10px);overflow:hidden}.v header{display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--accent);font-weight:700}.v header span{color:var(--muted);font-weight:500}.v .stage{flex:1;min-height:0;position:relative}.v .muted{color:var(--muted)}.v .active{background:color-mix(in srgb,var(--accent) 18%,var(--surface));border-color:var(--accent)!important;color:var(--fg)}.v button{font:inherit;color:var(--fg);background:var(--bg);border:1px solid var(--line);border-radius:7px;padding:5px 8px;cursor:pointer}.nav{display:flex;align-items:center;justify-content:space-around;gap:8px}.path{display:flex;flex-direction:column;gap:5px}.path span{border:1px solid var(--line);background:var(--bg);border-radius:6px;padding:5px;transition:.25s}.path span.on{border-color:var(--accent);color:var(--accent)}.screen{width:35%;height:70%;display:grid;place-items:center;border:2px solid var(--accent);border-radius:8px;background:var(--bg);font-weight:700;transition:background .3s}.screen.done{background:color-mix(in srgb,var(--accent) 22%,var(--surface))}
js
let i=0;const labels=["link click","loading","committed"];function tick(){for(let j=0;j<3;j++)document.getElementById("n"+j).classList.toggle("on",j===i);document.getElementById("navState").textContent=labels[i];document.getElementById("screen").textContent=i===2?"Items":"Home";document.getElementById("screen").classList.toggle("done",i===2);i=(i+1)%3}tick();setInterval(tick,850)

The Navigation API exposes link clicks and back navigation through `navigate` events. An app can intercept a navigation, prepare data, and render a new view in the same document.

The demo shows click, data preparation, and view commit in sequence. Support can vary by browser, so verify target browsers and keep ordinary link navigation as a fallback.

When to use

Consider it when an SPA must coordinate routing and loading timing.

Open as page ↗