沃梦达 / IT编程 / 前端开发 / 正文

利用JS hash制作单页Web应用的方法详解

下面是“利用JS hash制作单页Web应用的方法详解”的完整攻略。

下面是“利用JS hash制作单页Web应用的方法详解”的完整攻略。

首先介绍什么是单页Web应用

单页Web应用(Single-Page Application,SPA)是一种新型的Web应用程序模型。所谓单页应用,就是将多个页面应用整合在一个HTML文件中,通过JS动态更新HTML内容。

相对于传统的多页应用程序,单页应用程序具有以下优点:

  • 用户体验好,操作响应迅速,用户感觉像桌面应用程序一样快速。
  • 减少了服务器负载,因为只需要请求和响应一个HTML页面。
  • 易于开发和维护,因为整个应用程序只维护一个HTML文件和一份数据模型。

利用JS hash制作单页Web应用原理

单页Web应用的核心就是利用JS从不同的视图中加载数据并更新网页,当用户在浏览器地址栏中输入新的地址时,可以利用hash值判断用户想要进行哪些操作。如果hash值改变,就可以开始加载对应的内容。

具体来说,利用JS hash制作单页Web应用的原理是:

  1. 根据hash值的变化判断用户希望访问哪个页面。
  2. 据此改变对应的视图和数据模型。
  3. 重新渲染视图,并改变浏览器地址栏中的hash值。

实现步骤

下面介绍一下如何实现基于JS hash制作单页Web应用,这里依托于一个简单的示例。

示例1:实现页面切换

假设有两个页面,分别是首页和详情页,首先先实现通过hash值切换页面的功能。在HTML中定义两个div标签,一个id为content,用于呈现页面内容,另一个id为nav,用于呈现页面导航。

HTML结构:

<!DOCTYPE html>
<html>
  <head>
    <title>SPA Demo</title>
  </head>
  <body>
    <div id="nav">
      <a href="#/home">Home</a>
      <a href="#/detail">Detail</a>
    </div>
    <div id="content"></div>
    <script src="app.js"></script>
  </body>
</html>

JS脚本:

// 首先获取content和nav这两个DOM节点
var content = document.getElementById('content');
var nav = document.getElementById('nav');

// 监听hashchange事件,当hash值发生变化时执行loadRoute函数
window.addEventListener('hashchange', loadRoute);

// 设置一个路由表routeTable,记录hash值和对应的DOM操作
var routeTable = {
  '#/home': function() {
    content.innerHTML = '<h2>Home</h2><p>Welcome to Home Page!</p>';
  },
  '#/detail': function() {
    content.innerHTML = '<h2>Detail</h2><p>Here is Detail Page.</p>';
  }
};

function loadRoute() {
  // 获取当前的hash值
  var hash = window.location.hash;
  // 根据hash值执行对应的DOM操作
  routeTable[hash]();
}

// 页面加载完毕时先执行一次loadRoute函数
window.onload = function() {
  loadRoute();
};

示例2:连接RESTful API

由于单页Web应用只需要请求一次HTML页面,所以可以以异步方式连接Restful API获取JSON数据,这里以todo list为例。

HTML结构:

<!DOCTYPE html>
<html>
  <head>
    <title>SPA Demo</title>
  </head>
  <body>
    <div id="nav">
      <a href="#/home">Home</a>
      <a href="#/detail">Detail</a>
      <a href="#/todos">Todos</a>
    </div>
    <div id="content"></div>
    <script src="app.js"></script>
  </body>
</html>

JS脚本:

// API地址
var API_URL = 'https://jsonplaceholder.typicode.com/';

// 获取DOM节点
var content = document.getElementById('content');
var nav = document.getElementById('nav');

// 路由表
var routeTable = {
  '#/home': function() {
    content.innerHTML = '<h2>Home</h2><p>Welcome to Home Page!</p>';
  },
  '#/detail': function() {
    content.innerHTML = '<h2>Detail</h2><p>Here is Detail Page.</p>';
  },
  '#/todos': function() {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', API_URL + 'todos');
    xhr.onreadystatechange = function() {
      if (xhr.readyState === 4 && xhr.status === 200) {
        var data = JSON.parse(xhr.responseText);
        var html = '<h2>Todos</h2><ul>';
        data.forEach(function(item) {
          html += '<li>' + item.title + '</li>';
        });
        html += '</ul>';
        content.innerHTML = html;
      }
    };
    xhr.send();
  }
};

// 监听hashchange事件
window.addEventListener('hashchange', loadRoute);

// 执行路由操作
function loadRoute() {
  var hash = window.location.hash;
  routeTable[hash]();
}

// 页面加载完成时执行一次loadRoute
window.onload = function() {
  loadRoute();
};

总结

通过利用JS hash制作单页Web应用,可以实现快速响应、减轻服务器负担、易于维护等优点。在实现的过程中,我们通过两个简单的示例详细介绍了单页Web应用的实现步骤。同时,在实际应用中,为了进一步提高单页Web应用的性能,我们可以使用更灵活、依赖性更低的前端框架,如Vue.js,以解决当前SPA框架存在的一些痛点。

本文标题为:利用JS hash制作单页Web应用的方法详解