当前位置:首页 > JavaScript

js route 实现

2026-03-14 17:06:06JavaScript

路由实现的基本方法

在 JavaScript 中实现路由通常有两种方式:基于哈希(Hash)的路由和基于历史 API(History API)的路由。以下是具体实现方法:

基于哈希的路由

哈希路由利用 URL 中的哈希部分(#)来实现无刷新页面跳转。当哈希变化时,触发 hashchange 事件。

js route 实现

window.addEventListener('hashchange', function() {
  const hash = window.location.hash.substring(1);
  handleRoute(hash);
});

function handleRoute(route) {
  switch(route) {
    case 'home':
      document.getElementById('content').innerHTML = '<h1>Home Page</h1>';
      break;
    case 'about':
      document.getElementById('content').innerHTML = '<h1>About Page</h1>';
      break;
    default:
      document.getElementById('content').innerHTML = '<h1>404 Not Found</h1>';
  }
}

基于 History API 的路由

History API 提供了 pushStatepopstate 方法,允许更干净的 URL 而不需要哈希符号。

window.addEventListener('popstate', function() {
  const path = window.location.pathname;
  handleRoute(path);
});

function navigateTo(path) {
  window.history.pushState({}, '', path);
  handleRoute(path);
}

function handleRoute(path) {
  switch(path) {
    case '/home':
      document.getElementById('content').innerHTML = '<h1>Home Page</h1>';
      break;
    case '/about':
      document.getElementById('content').innerHTML = '<h1>About Page</h1>';
      break;
    default:
      document.getElementById('content').innerHTML = '<h1>404 Not Found</h1>';
  }
}

动态路由的实现

对于需要处理动态参数的路由(如 /user/:id),可以使用正则表达式匹配。

js route 实现

function handleDynamicRoute(path) {
  const userPattern = /^\/user\/(\d+)$/;
  const match = path.match(userPattern);

  if (match) {
    const userId = match[1];
    document.getElementById('content').innerHTML = `<h1>User ID: ${userId}</h1>`;
    return;
  }

  // 其他路由处理...
}

路由库的使用

对于更复杂的应用,可以使用现有的路由库如 React Router、Vue Router 或 Page.js:

// 使用 Page.js 的示例
page('/home', function() {
  document.getElementById('content').innerHTML = '<h1>Home Page</h1>';
});

page('/about', function() {
  document.getElementById('content').innerHTML = '<h1>About Page</h1>';
});

page('*', function() {
  document.getElementById('content').innerHTML = '<h1>404 Not Found</h1>';
});

page();

路由守卫的实现

路由守卫用于在路由切换前进行权限检查或其他操作。

function checkAuth(ctx, next) {
  const isAuthenticated = /* 检查用户是否登录 */;
  if (!isAuthenticated && ctx.path !== '/login') {
    next('/login');
  } else {
    next();
  }
}

page('/dashboard', checkAuth, function() {
  document.getElementById('content').innerHTML = '<h1>Dashboard</h1>';
});

这些方法涵盖了从基础到进阶的路由实现技术,可以根据项目需求选择合适的方案。

标签: jsroute
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…