1. 程式人生 > 其它 >[Javascript] History API

[Javascript] History API

const players = [
  {
    id: 'x9Opl1',
    name: 'Mario',
    bio: 'Italian plumber and lead character',
  },
  {
    id: '7fGlZ0',
    name: 'Luigi',
    bio: "Mario's green younger brother",
  },
  {
    id: 'y0SH11',
    name: 'Yoshi',
    bio: 'Green dinosaur turns enemies into eggs',
  },
  {
    id: 
'a8Pxia', name: 'Wario', bio: "Mario's yellow and purple arch-rival", }, ]; const app = document.getElementById('app'); app.innerHTML = ` <h1>JavaScript HTML5 APIs</h1> <nav class="links"> ${players.map((player) => `<a href="/${player.id}">${player.name}</a>`)}
</nav> <div class="info"></div> <button type="button" class="back">Back</button> <button type="button" class="forward">Forward</button> `; const info = document.querySelector('.info'); const links = [...document.querySelectorAll('.links a')]; const back = document.querySelector('
.back'); const forward = document.querySelector('.forward'); const render = (state) => { info.innerHTML = ` <h3>${state.name}</h3> <p>${state.bio}</p> `; }; const pushDefaultState = () => { const player = players[0]; history.replaceState(player, '', player.id); render(player); }; const init = () => { if (location.pathname === '/') { pushDefaultState(); return; } const id = location.pathname.substring(1); const player = players.find((player) => player.id === id); render(player); }; back.addEventListener('click', () => history.go(-1)); forward.addEventListener('click', () => history.go(1)); links.forEach((link) => { link.addEventListener('click', (e) => { e.preventDefault(); const id = e.target.getAttribute('href').substring(1); const player = players.find((player) => player.id === id); history.pushState(player, '', player.id); render(player); }); }); window.addEventListener('popstate', (e) => { if (!e.state) { pushDefaultState(); return; } const player = e.state; render(player); }); if (window.history && window.history.pushState) { init(); }