实现一个简单的单页应用

简介: 实现一个简单的单页应用

本文实现的单页应用很简单。

一段简单 HTML 结构:

<main>这是一个简单的单页应用示例</main>
<ul>
  <li><a href="/">Home</a></li>
  <li><a href="/about">About</a></li>
  <li><a href="/contact">Contact</a></li>
</ul>
首先,我们将每个不同路线的网站标题和内容存储在一个名为 pages 的对象中:

const pages = {
   
  '/': {
   
    title: 'Home',
    content: `<h1>欢迎来到我的网站!</h1>
      <p>这是我的网站主页</p>
      <h2>相关链接</h2>`
  },
  '/about': {
   
    title: 'About',
    content: `<h1>关于我</h1>
      <p>我喜欢吃吃喝喝!</p>
      <h2>相关链接</h2>`
  },
  '/contact': {
   
    title: 'Contact',
    content: `<h1>联系我</h1>
      <p>我可以通过 email 联系到我</p>
      <h2>相关链接</h2>`
  }

}
然后,在页面加载时执行以下操作:

获取当前路径名(例如 /、/about、/contact)
根据路径名将 main 元素的 innerHTML 设置为正确的内容
根据路径名设置文档标题
我们使用 window.location.pathname 访问当前路径。接着,我们根据 pages 对象设置 main 元素的 innerHTML 属性和 document.title 属性。

const path = window.location.pathname
document.querySelector('main').innerHTML = pages[path].content
document.title = pages[path].title

每次我们点击一个链接,我们都会向服务器发送一个请求,并得到相同的响应。我们需要防止链接执行 GET 请求,而是直接在视图中操作 HTML:

const links = document.querySelectorAll('a')
links.forEach((link) => {
   
  link.addEventListener('click', (e) => {
   
    e.preventDefault()
    const path = e.target.pathname
    window.history.pushState({
   }, pages[path].title, path)
    document.querySelector('main').innerHTML = pages[path].content
    document.title = pages[path].title
  })
})

以上代码中,我们为文档中的每个链接添加了一个事件监听器。使用 preventDefault 阻止链接的默认操作。相反,它从目标锚点元素获取路径名,使用 window.history.pushState 来更改 URL,然后执行与加载时执行的代码相同的 innerHTML 和 title 更改内容。

相关文章
|
5月前
|
数据采集 JavaScript 前端开发
Vue面试题二】、说说你对SPA (单页应用) 的理解?
这篇文章详细介绍了单页应用(SPA)的概念、与多页应用(MPA)的区别、SPA的优缺点,并提供了实现SPA的基本方法和为SPA应用进行搜索引擎优化(SEO)的几种策略。
Vue面试题二】、说说你对SPA (单页应用) 的理解?
|
3月前
|
前端开发 JavaScript 搜索推荐
|
8月前
单页404源码
单页404源码
95 4
单页404源码
|
8月前
|
前端开发 JavaScript
前端年度需求最大的前端框架都有那些?
【4月更文挑战第7天】 前端框架如React、Angular、Vue.js和Svelte各有优势,选择需考虑项目需求、团队经验、社区支持、性能和学习曲线。React适合高性能UI,Angular适合大型企业应用,Vue.js轻量且易学,Svelte则以高性能著称。活跃社区、丰富的第三方库和良好文档是重要考量因素。
78 0
|
8月前
|
缓存 前端开发 JavaScript
单页应用如何提高加载速度?
提高单页应用(Single Page Application,SPA)的加载速度可以从以下几个方面入手:
76 1
|
8月前
|
编解码 前端开发 JavaScript
前端开发中的响应式网页设计与实现
传统的网页设计往往只适配于特定的屏幕尺寸,无法在不同设备上提供良好的用户体验。本文将介绍如何利用HTML、CSS和JavaScript技术实现响应式网页设计,使网站能够在不同设备上自适应地展现,并提供了一些实用的技巧和最佳实践。
|
存储 缓存 算法
单页应用如何提高加速速度
单页应用如何提高加速速度
82 0
|
JavaScript 前端开发 开发者
使用Vue.js构建单页应用:响应式UI和组件化开发
Vue.js是一种流行的JavaScript框架,广泛用于构建现代化的单页应用程序。它以其简洁的语法、灵活的架构和强大的响应式能力而备受开发者青睐。本文将介绍如何使用Vue.js构建单页应用,并重点关注响应式UI和组件化开发的重要性。
224 0
|
Web App开发 JavaScript 前端开发
单页切屏效果的原理
1.实现过程中的注意事项: 鼠标滚轮事件的兼容性问题: W3C并没有对鼠标滚轮事件进行规范,各浏览器厂商封装了不同的实现方法,事件属性也不一样,FireFox用了一个私有实现DOMMouseScroll。其他浏览器都是用mousewheel实现,所以需要做一下兼容处理(详见下面的js关键代码的截图)
163 0