You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除URL中的#符号 实现锚点跳转显示斜杠路径格式

锚点跳转隐藏哈希、显示路径格式地址的实现方法

核心实现逻辑是拦截原生锚点跳转行为,用JS手动控制滚动定位,同时通过History API修改地址栏显示内容,全程不触发页面刷新,还要配套处理路径直接访问、浏览器前进后退的兼容问题,具体步骤如下:

1. 调整导航链接写法

把原来带#锚点的href替换成你要显示的路径地址,新增自定义属性存储目标区块的id,方便JS定位:

<a class="nav-link" href="/home/about" data-target-section="about">About</a>

如果你的站点不是纯单页应用,必须先配置路由/服务端重写规则:把/home/about这类自定义路径全部指向当前home页面,否则用户直接访问该路径会报404错误。

2. 拦截点击事件实现自定义跳转

给导航链接绑定点击事件,阻止a标签的默认跳转行为,手动滚动到对应区块后修改地址栏内容:

document.querySelectorAll('.nav-link').forEach(navLink => {
  navLink.addEventListener('click', function(e) {
    e.preventDefault();
    const targetSectionId = this.dataset.targetSection;
    const showPath = this.getAttribute('href');
    const targetEl = document.getElementById(targetSectionId);

    if (targetEl) {
      // 滚动到目标区块,和原生锚点行为一致,需要平滑滚动把behavior改成smooth即可
      targetEl.scrollIntoView({ behavior: 'auto' });
      // 修改地址栏,不会触发页面刷新
      history.pushState(null, '', showPath);
    }
  });
});

3. 兼容直接访问、前进后退场景

用户直接输入路径地址访问、或者点击浏览器前进后退按钮时,需要自动定位到对应区块:

function matchSectionAndScroll() {
  // 从当前路径提取区块id
  const pathList = window.location.pathname.split('/').filter(item => item);
  const currentSectionId = pathList.at(-1);
  const targetEl = document.getElementById(currentSectionId);
  if (targetEl) {
    // 等DOM渲染完成再滚动,避免定位偏移
    setTimeout(() => targetEl.scrollIntoView({ behavior: 'auto' }), 0);
  }
}
// 页面首次加载时匹配路径滚动
document.addEventListener('DOMContentLoaded', matchSectionAndScroll);
// 监听浏览器前进后退,同步滚动位置
window.addEventListener('popstate', matchSectionAndScroll);

4. 必做的路由/服务端配置

  • 前端路由项目(Vue/React等):将/home、/home/about等所有导航对应路径,都指向同一个home页面组件即可
  • 静态站点(Nginx/Apache托管):配置重写规则,将/home/*下的所有路径都重定向到home页面对应的html文件,避免404

该方案全程不会修改URL的hash部分,地址栏始终显示干净的路径格式,和原生锚点跳转的体验完全一致,不会出现页面刷新的情况。

内容的提问来源于stack exchange,提问作者user19069531

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 20:39:30