[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(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2020-12-15 [Java Spring MVC] @PathVariable, @Vallidated, @PostMapping & @ResponseStatus
2020-12-15 [Java Spring] @Embeddable and @EmbeddedId
2019-12-15 [Algorithm] 53. Maximum Subarray
2018-12-15 [Algorithm] Breadth First JavaScript Search Algorithm for Graphs
2018-12-15 [Algorithm] JavaScript Graph Data Structure
2017-12-15 [Python] Read and plot data from csv file
2017-12-15 [React] Make Controlled React Components with Control Props