[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 = `
  

JavaScript HTML5 APIs

class="info">
`; 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 = `

${state.name}

${state.bio}

`; }; 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(); }