Navigation API

내비게이션 이벤트를 한곳에서 받아 전환과 로딩을 제어합니다.

···
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)

Navigation API는 링크·뒤로가기 등 이동을 `navigate` 이벤트로 다룹니다. 앱은 이벤트를 가로채 필요한 데이터를 준비한 뒤 같은 문서에서 새 화면을 그릴 수 있습니다.

데모는 클릭, 데이터 준비, 화면 커밋을 차례로 보여줍니다. 실제 지원 범위는 브라우저마다 달라질 수 있으므로 배포 전 대상 브라우저에서 확인하고 일반 링크 이동을 대체 경로로 둡니다.

언제 쓰나

SPA 라우팅에서 이동과 로딩 타이밍을 함께 관리할 때 검토합니다.

페이지로 열기 ↗