zoukankan      html  css  js  c++  java
  • [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();
    }
  • 相关阅读:
    upload.go
    heartbeat.go
    delete.go
    get.go
    handler.go
    uuid.go
    kingpin_parser.go
    disk.go
    logrus_hook.go
    反连接NOT EXISTS子查询中有or 谓词连接条件SQL优化一例
  • 原文地址:https://www.cnblogs.com/Answer1215/p/15693635.html
Copyright © 2011-2022 走看看